CSH

2012-03-16 1 views
1

内の文字列を抽出すると、あなたは説明してくださいだろう。CSH

sh-3.1$ echo $MYPATH 
/opt/Application/DATA/CROM/my_application 
sh-3.1$ awk '{print substr($MYPATH,3)}' 

おかげ 敬具あなたは-vを使用することができます

答えて

1

MYPATHは、文字列が一重引用符を使用するため、シェルに置き換えられません。次のことを考えてみましょう:

csh$ echo '{print substr($USER,3)}' 
{print substr($USER,3)} 
csh$ echo "{print substr($USER,3)}" 
{print substr(dshawley,3)} 

単一引用符の使用量は、そのままプログラムに文字列引数を渡すためにシェルに指示します。 Double引用符は、プログラムに渡す前に引数に変数展開を実行するようにシェルに指示します。これは、シェルといくつかのプログラミング言語(例えば、perl)の間で共通の基本的なシェル機能です。

次の問題は、awkは、最初のパラメータの周りの引用符をsubstrにするか、解析が失敗することです。この場合、おそらく「不正な変数名」という警告が表示されます。これは、引用符で囲まれた文字列内で二重引用符を正しくエスケープする方法がわからないので、私がcshで失われるところです。あなたはすでに何かをしようとする前にawkは、入力ストリームが必要になります、このことを知っていない

sh$ awk "{print substr(\"$USER\",3)}" 
input 
^D 
hawley 
sh$ 

念のために:bashの/ shを/ kshのには、次の操作を行います。私は小さな例のために "入力"とEOF文字を入力しなければなりませんでした。

1

Quoting and escaping

"string" is a weak quote. Enclosed whitespace and wildcards are taken as literals, but variable and command substitutions are still performed. 
'string' is a strong quote. The entire enclosed string is taken as a literal. 

変数をawkに渡すオプション:

awk -v mypath=$MYPATH 'BEGIN{print substr(mypath, 3)}' 
+0

ところで、これはシェルの頭痛を完全には避けるので、私が提示したものよりはるかに良いオプションです。 –

関連する問題