Bash - Perlスクリプト変数の挿入

Bash - Perlスクリプト変数の挿入

Perlコードにbash変数を挿入するのに問題があります。このコードの目的は、bashスクリプトファイルを使用して端末で特定のperl印刷コマンドを実行することです。問題を次のコードに単純化しました。

i=5
myvar=$(perl -e 'print "AAA" x ($i)')
echo "$myvar"

値が5の変数iがありますが、iの値だけ文字列 "AAA"を印刷したいと思います。この場合は5です。このために与えられたPerlコードを使用したいと思います。現在、Perlコードは私の変数iの内容を読み取ることができません。これは、iの値を求める部分に「」を使用しなかったためである可能性が高い。

文字列「AAA」はシェルコードの16進コードに置き換えられているため、「と」を切り替えることは実際には可能ではありません。これは、ループ内の値が増加/変更されるため、iの代わりに5を使用することはできません。

Perlコードがi値を読み取ることができるようにしたり、コメントでこの問題を解決するのに役立ちましたか?

答え1

変数拡張を有効にするには、次のようにします。

myvar=$(perl -e 'print "AAA" x ('"$i"')')

答え2

Perlには基本的な形式のオプション解析が組み込まれています。 awkのオプションと非常によく似ています-vが、もっと醜いです。

myvar=$(perl -s -e 'print "AAA" x ($j)' -- -j="$i")

$iシェルをPerl変数としてPerlに渡します$j-jPerlバイナリ自体が飲み込まないように、二重ハイフンが必要です。

答え3

問題は使用する参照タイプです。一重引用符はシェル変数を拡張します。いいえ完了です。

i=5
myvar=$(perl -e "print 'AAA' x ($i)")
echo "$myvar"

コードは期待どおりに機能します。

関連情報