删除起始空格制表符输出 echo 多行字符串

Gre*_*etr 5 bash shell

我无法弄清楚如何缩进 bash 脚本的部分内容,从而在代码中保留缩进。我希望输出格式正确,输出行没有任何制表符/空格前缀。

例如:脚本

#!/bin/bash

INFO1="something
output1"
INFO2="output2"
MY_INFO=INFO1

if [ True ]; then
    INFO="
    Here are the test results
    bbb
    ccc
    aaa
    ${!MY_INFO}
    " 
fi
echo "${INFO}"
Run Code Online (Sandbox Code Playgroud)

输出返回:

    Here are the test results
    bbb
    ccc
    aaa
    something
output1
Run Code Online (Sandbox Code Playgroud)

预期输出:

Here are the test results
bbb
ccc
aaa
something
output1
Run Code Online (Sandbox Code Playgroud)

agc*_*agc 3

引号保留空格不是一个错误,而是一个功能。这就是双引号的用途。

另一个问题是bash,(与python)不同,它不知道如何缩进以提高可读性——bash一个不带引号的空格与一千个空格相同。

各种补救措施:

  1. 引用多行字符串时放弃缩进,即:

    if [ True ]; then
    INFO="
    Here are the test results
    bbb
    ccc
    aaa
    ${!MY_INFO}
    " 
    fi
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用bash, (或其他工具)使缩进消失。所以首先定义一个缩进的多行字符串:

     foo="
          bar
          baz"
    
    Run Code Online (Sandbox Code Playgroud)

    然后调整$foo以删除空格:

     foo="${foo// }"
    
    Run Code Online (Sandbox Code Playgroud)

    现在,$foo不再缩进,但如果有应该保留的空格,那就太过分了。

  3. 和以前一样,但是在显示的时候,(这样比较浪费),即:

    echo  "${foo// }"
    
    Run Code Online (Sandbox Code Playgroud)