Bash 删除起始空格制表符输出回音多行字符串
我不知道如何缩进bash脚本的某些部分,从而在代码中保留缩进。我希望输出格式正确,输出行没有任何制表符/空格前缀 例:脚本Bash 删除起始空格制表符输出回音多行字符串,bash,shell,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 "${I
#!/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}"
返回的输出:
Here are the test results
bbb
ccc
aaa
something
output1
预期产出:
Here are the test results
bbb
ccc
aaa
something
output1
保留引号的空格不是bug,而是特性。这就是双引号的含义 另一个问题是
bash
(不同于python
),不知道缩进的可读性——对于bash
,一个不带引号的空格等于一千
各种补救办法:
if [ True ]; then
INFO="
Here are the test results
bbb
ccc
aaa
${!MY_INFO}
"
fi
bash
,(或其他工具)使缩进消失。因此,首先定义一个缩进的多行字符串:
foo="
bar
baz"
然后调整$foo以删除空格:
foo="${foo// }"
现在,$foo不再缩进,但如果存在本应保留的空格,则缩进会过多是否缺少一个
echo$INFO
?更新了问题如果您回显该双引号变量,它将打印带有换行符和缩进的$INFO
。如果你不加引号地回显它,你会在一行中得到它。如果你想echo
某个东西,并且输出与该东西不同,你必须用sed
之类的东西去掉前导空格。这个问题以前有过。@Varun,Q涉及源代码中的缩进,因此与多行字符串不同,多行字符串有额外的空间(保留缩进),在源代码中没有缩进。
echo "${foo// }"