awk
-v
awk -v var="value" ...
次のフラグを使用して、名前付き変数をスクリプトに渡す便利な方法を提供します。 Perlを使って同じことをすることはできますか?それとも、適切な引用などでシェルを介して補間する必要がありますかargv
?このオプションは望ましい効果を提供できますが、ブール値にのみ適用されます。getopts
%ENV
-s
答え1
さらなる調査を通じて、単にスイッチを切り替えるのではなく、任意のデータを渡すオプションをmeuh
使用していただきありがとうございます。単一行でオプションを使用する正しい構文は次のとおりです。-s
-s
$ perl -se 'print "xyz=$xyz\n"' -- -xyz="abc"
xyz=abc
答え2
以下は、コマンドラインからawkに似た変数割り当てを読み、シェルスクリプトからインラインPerlコードを受け入れる方法を示しています。
# cat test.sh
perl - FS=':' GRP='50' <<'EOF'
eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
print "$FS\n";
print "$GRP\n";
EOF
これが証拠です:
# sh test.sh
:
50
インライン、複数行のPerlコードを受け入れるOPの答えの代替形式は次のとおりです。
# cat test.sh
perl -s -- - -xyz="abc" <<'EOF'
print "xyz=$xyz\n";
EOF
そして証明してください:
# sh xyz.sh
xyz=abc
この形式はシェルスクリプトで書かれた形式と非常によく似ており、コードを別のファイルに入れることなく、重要な翻訳されたコードを生成されたawk
コードに簡単に置き換えることができます。awk
a2p
perl