私は次のようにtcshからsedを使用できます:
set a = `echo $a | sed -e 's_old_new_'`
すべてが順調ですが、これを実行したい場合:
set a = `echo $a | sed -e 's_old_*new_'`
「セット:一致なし」が表示されます。。どうすればこの星から逃げることができますか?
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_'`"
二重引用符で囲まれていないコマンド置換(`
または$(..)
)は、ファイル名の拡張(別名「グロブ」)と単語の分割の対象になります。
通常、変数の割り当ては、RHSのファイル名拡張と単語分割を抑制しますが(二重引用符がなくても)、コマンド置換の場合はファイル名拡張を抑制しないようです。
参考のために実行したテストは次のとおりです。
$ touch randomfile
$ a="*file"
$ var_expand=$a
$ echo "$var_expand"
*file
$
$ cmd_subst=$(echo '*file')
$ echo "$cmd_subst"
randomfile
したがって、変数に割り当てるときは、コマンド置換を常に二重引用符で囲むことをお勧めします。
safe="$(cmd)"
注:これはBashでテストされていますが、tcshはこの点で同様の動作を示すと思います。