内の文字列を抽出すると、あなたは説明してくださいだろう。CSH
sh-3.1$ echo $MYPATH
/opt/Application/DATA/CROM/my_application
sh-3.1$ awk '{print substr($MYPATH,3)}'
おかげ 敬具あなたは-v
を使用することができます
内の文字列を抽出すると、あなたは説明してくださいだろう。CSH
sh-3.1$ echo $MYPATH
/opt/Application/DATA/CROM/my_application
sh-3.1$ awk '{print substr($MYPATH,3)}'
おかげ 敬具あなたは-v
を使用することができます
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文字を入力しなければなりませんでした。
"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)}'
ところで、これはシェルの頭痛を完全には避けるので、私が提示したものよりはるかに良いオプションです。 –