移除开头的空格和制表符,输出回显多行字符串。

20 浏览
0 Comments

移除开头的空格和制表符,输出回显多行字符串。

我无法弄清楚如何缩进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

0
0 Comments

问题出现的原因是在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// }"

0