Bash 参数扩展以删除制表符

Bash 参数扩展以删除制表符

我在脚本中有这样一行:

TATVAR=$(echo $PARAMVAR|sed -e 's/^[ \t]*//')

我想将其缩小到不执行额外的程序(sed),shellcheck 建议我应该使用:

${variable//search/replace}

我尝试了很多正则表达式,但似乎不起作用。有谁知道如何做到这一点?

答案1

您可以使用"${PARAMVAR//$'\t'/}",但请注意,这是 bash 功能,因此其他 shell 可能不支持它。这意味着您的脚本以#!/bin/bash, not #!/bin/sh( 和不要使用sh scriptname) 运行它。

$ PARAMVAR=$'space: tab:\tlinefeed:\nend'
$ echo "$PARAMVAR"
space: tab: linefeed:
end
$ echo "${PARAMVAR//$'\t'/}"
space: tab:linefeed:
end

为了进行比较,使用[[:blank:]]也会消除空格:

$ echo "${PARAMVAR//[[:blank:]]/}"
space:tab:linefeed:
end

并且您应该始终将变量引用括在双引号中,否则所有空格都会被视为分词(然后echo将它们转换为空格):

$ echo $PARAMVAR
space: tab: linefeed: end

答案2

我刚刚通过以下方式解决了这个问题:

TATVAR="${PARAMVAR//[[:blank:]]/}"

如果有人能确认它是正确的,我会很高兴。

相关内容