我在脚本中有这样一行:
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:]]/}"
如果有人能确认它是正确的,我会很高兴。