1

以下はcshスクリプトです。

#! /bin/csh
set alpha=10\20\30;
set beta = $alpha.alpha;
perl -p -i.bak -e 's/gamma/'$beta'/' tmp;

tmpファイルには単語のみが含まれていますgamma。を実行した後、tmp でtmp.csh期待10\20\30.alphaしていますが、現在は102030.alpha.

この状況でスラッシュを保持するにはどうすればよいですか?

注:アルファ変数の定義を変更することは好みません。これは、この形式 (10\20\30) のみである必要があるスクリプトで使用されるためです。

ありがとう。

4

1 に答える 1

2

csh では、アルファ割り当ての場合、バックスラッシュは「リテラル 2 または 3」を意味します。csh がこれを行わないようにするには、代入を引用符で囲む必要があります。

#! /bin/csh
set alpha="10\20\30";
set beta = $alpha.alpha;
perl -p -i.bak -e 's/gamma/'$beta'/' tmp;

疑わしい場合は、変数を「エコー」して、変数に何が含まれているかを正確に確認すると役立つことがよくあります。「アルファ」変数は、最初に割り当てられた方法で 10\20\30 に等しくないため、最終的なメモがわかりません。

于 2013-03-29T17:47:42.023 に答える