Bash参数扩展以删除选项卡

马特乌斯·佩塞克(Mateusz Pacek)

我在脚本中有这样一行:

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

我想将其缩小为不执行其他程序(sed),shellcheck建议我应该使用:

${variable//search/replace}

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

戈登·戴维森

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

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

为了进行比较,using[[:blank:]]也将消除空格:

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

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

$ echo $PARAMVAR
space: tab: linefeed: end

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章