用星代替内容

时间:2012-10-27 22:41:43

标签: sed tcsh

我可以像这样使用tcsh中的sed:

set a = `echo $a | sed -e 's_old_new_'`

一切都很好,但是当我想这样做时:

set a = `echo $a | sed -e 's_old_*new_'`

我可以看到“设置:不匹配”。 。我怎么能逃脱这颗星?

2 个答案:

答案 0 :(得分:3)

我对tcsh了解不多,但很少有实验表明设置变量的集合试图扩展右侧*。这可能会有所帮助:

set a="`echo '2e2' | sed -e 's_e_*_'`"
echo "$a"
2*2
echo $a
echo: No match.

所以双引号后面的引号会起作用。

set a = "`echo $a | sed -e 's_old_new_'`"

答案 1 :(得分:0)

未用双引号括起来的命令替换(`$(..))受文件名扩展(即'globbing')和单词拆分的影响。

通常,变量赋值会抑制RHS的文件名扩展和单词拆分(即使没有双引号),但在命令替换的情况下显然不是文件扩展名。

这是我参考的一项测试:

$ touch randomfile
$ a="*file"
$ var_expand=$a
$ echo "$var_expand"
*file
$
$ cmd_subst=$(echo '*file')
$ echo "$cmd_subst"
randomfile

所以我认为在分配变量时总是双引号命令替换是个好习惯。

safe="$(cmd)"

注意:这是在Bash中测试的,但我认为tcsh在这方面表现出类似的行为。