我无法弄清楚如何缩进 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)
引号保留空格不是一个错误,而是一个功能。这就是双引号的用途。
另一个问题是bash,(与python)不同,它不知道如何缩进以提高可读性——bash一个不带引号的空格与一千个空格相同。
各种补救措施:
引用多行字符串时放弃缩进,即:
if [ True ]; then
INFO="
Here are the test results
bbb
ccc
aaa
${!MY_INFO}
"
fi
Run Code Online (Sandbox Code Playgroud)使用bash, (或其他工具)使缩进消失。所以首先定义一个缩进的多行字符串:
foo="
bar
baz"
Run Code Online (Sandbox Code Playgroud)
然后调整$foo以删除空格:
foo="${foo// }"
Run Code Online (Sandbox Code Playgroud)
现在,$foo不再缩进,但如果有应该保留的空格,那就太过分了。
和以前一样,但是在显示的时候,(这样比较浪费),即:
echo "${foo// }"
Run Code Online (Sandbox Code Playgroud)