対話型スクリプトに入力を提供するために、次の文字列を使用しました。
script <<< $'1 2\n3 4\n5 6\nq'
これは効果的に入ります。
1 2
3 4
5 6
q
スクリプトを入力してください。しかし、そのうちの1つを変数に置き換える方法は何ですか?
script <<< $'$var 2\n3 4\n...'
動作しません...
ベストアンサー1
ここでは文字列ではありませんが、ANSI-Cの引用:
$ 'string'形式の単語は特別に扱われます。 ...拡張結果は、ドル記号がないかのように一重引用符で囲まれました。
だからあなたが得るものは右側に一重引用符で囲まれた文字列です<<<
。ここで、文字列は文字列として扱われ、追加の処理は不要です。
ただし、単語全体に1つの引用符を使用する必要はありません。複数の引用符(または引用符のない単一の単語)を一緒にリンクできます。
script <<< "$var 2"$'\n'"3 4"$'\n'"5 6"$'\n'q
やりたいことをします。
または、引用符の代わりにバックスラッシュを使用してスペースをエスケープすることもできます"1 2"
。
また、使用することができますecho -e
通常のパイプを使用してください。
echo -e "$var 2\n3 4\n5 6\nq" | script
またはprintf
:
printf '%s 2\n3 4\nq' "$var" | script
-e
echo
これは、パラメータでエスケープ処理を有効にするために必要です。printf
これは基本的に行われますが、独自の補間システムがあります(printf "$var 2\n3 4\nq"
これも機能しますが、$var
エスケープ文字を含めることができる場合は問題が発生します)。