移除开头的空格和制表符,输出回显多行字符串。
移除开头的空格和制表符,输出回显多行字符串。
我无法弄清楚如何缩进bash脚本的部分,并保留代码中的缩进。我希望输出的格式正确,输出行没有任何制表符/空格前缀。
例如:脚本
#!/bin/bash INFO1="something output1" INFO2="output2" MY_INFO=INFO1 if [ True ]; then INFO=" 这是测试结果 bbb ccc aaa ${!MY_INFO} " fi echo "${INFO}"
返回的输出:
这是测试结果 bbb ccc aaa something output1
期望的输出:
这是测试结果 bbb ccc aaa something output1
问题出现的原因是在bash中,双引号会保留字符串中的空格,而且在bash中,没有像python那样的缩进功能,一个没有引号的空格与一千个空格是一样的。
解决方法有以下几种:
1. 在引用多行字符串时,放弃缩进,即将字符串包裹在双引号中:
if [ True ]; then INFO=" Here are the test results bbb ccc aaa ${!MY_INFO} " fi
2. 使用bash或其他工具来去除缩进。首先定义一个有缩进的多行字符串:
foo=" bar baz"
然后使用`${foo// }`来去除空格:
foo="${foo// }"
现在,`$foo`不再有缩进,但如果有本应保留的空格则会被去除。
3. 与上一种方法类似,但在显示时去除缩进(这样更加浪费资源):
echo "${foo// }"