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
。-j
Perlバイナリ自体が飲み込まないように、二重ハイフンが必要です。
答え3
問題は使用する参照タイプです。一重引用符はシェル変数を拡張します。いいえ完了です。
i=5
myvar=$(perl -e "print 'AAA' x ($i)")
echo "$myvar"
コードは期待どおりに機能します。