在我的tcsh脚本中我有这个
sed -i "s/^${y}$//g" $x
我如何让它工作?要么我没有变化,要么像非法变量名称或变量名称必须包含字母数字字符。试过“”的不同组合。 ''在sed内。实施例
sed 's/^'"${y}"'$//g' $x
答案 0 :(得分:2)
在双引号字符串中扩展变量名在tcsh中很棘手。在你的命令中:
sed -i "s/^${y}$//g" $x
应正确扩展shell或环境变量$y
的值,但shell会尝试将$/
扩展为$/
的值,正如错误消息所示非法变量名。
你的第二个命令:
sed 's/^'"${y}"'$//g' $x
几乎正确;它只是缺少-i
的{{1}}参数。
这应该有效: 。 sed's / ^'“$ {y}”'$ // g'$ x
在这种情况下,不需要sed
和{
}
,所以你可以写:
y
或者你可以这样做:
sed 's/^'"${y}"'$//g' $x
最后一个版本从双引号转换为单引号,然后返回到双倍,只是围绕sed -i "s/^$y"'$'"//g" $x
字符。这是一个重点问题,您是否只想在不需要展开的$
周围使用单引号,或者只在$
周围使用双引号,而您希望扩展它。
更简单地说,你可以在双引号字符串中转义$y
字符,方法是在$
前面加上它(我认为这可能特定于tcsh;原来的csh可能无法使用要做到这一点)。所以我认为这是首选方法 - 假设您有tcsh而不是旧式csh:
\
我假设您要执行的操作是更新sed -i "s/^$y\$//g" $x
命名的文件,删除每行开头$x
中包含的字符串。这似乎是你想要做的,但我不能确定。