我已在Debian 7上将shell从dash
更改为bash 4.2.37
。
现在,以下内容不再有效:
sed -i.bak "/${VARIABLE}/d" /path/file
sed -i.bak '/'$VARIABLE'/d' /path/file
产生:
sed: -e expression #1, char 0: no previous regular expression
OS X上的bash 3.2
按预期工作
答案 0 :(得分:2)
无论你的shell如何,sed
语法错误都是一样的。如果VARIABLE
为空,那就是你得到的。
更改shell可能会更改定义的变量。例如,BASH_VERSION
显然只会在Bash中设置。或者您可以在.bashrc
中本地定义变量,Dash不会读取; Bash使用了许多其他启动文件,但Dash没有。
您可以做的是将脚本更改为要设置VARIABLE
:
: ${variable?Not set}
如果未设置变量,这是一个常见的Bourne shell习惯用法。 :
伪命令就像一个注释,但它会评估它的参数;如果${variable?Message}
未设置,评估后Message
将使用variable
退出shell。
答案 1 :(得分:1)
将其包装在if语句中:
if [[ ! -z $VAR ]]; then
sed -i.bak /"${VAR}"/d test;
fi
或作为oneliner:
if [[ ! -z $VAR ]]; then sed -i.bak /"${VAR}"/d filename.txt; fi
甚至更简单:
[[ ! -z $VAR ]] && sed -i.bak /"${VAR}"/d filename.txt
原始答案: 以下适用于我:
sed -i.bak /"$VARIABLE"/d /path/file
GNU Bash 4.2-2ubuntu2.1