Bashスクリプトでbash配列を繰り返してバイナリファイルを入力します。

Bashスクリプトでbash配列を繰り返してバイナリファイルを入力します。

私はbashを実行しています。

  • mybinary対話型ユーザー入力を許可するバイナリがあるとします。
  • mybinaryユーザーが入力しqて押すまでEnter(「終了」を意味する)、出席者名が入力として使用されるとしますq
  • <<EOF/ surrounding the inputを使用して、bashスクリプトで入力プロセスを自動化できますEOF。たとえば、配列に事前定義されたユーザー入力を入力したいとしますmyarray。私はできます:
#!/bin/bash

myarray=("Alice" "Bob" "Charlie" "q") # q quits the binary

mybinary -f inputfile.txt -o outputfile.txt<<EOF
${myarray[0]}
${myarray[1]}
${myarray[2]}
${myarray[3]}
EOF

上記をテストしましたが、うまくいきます。ただし、何百もの(文字列)要素がある場合、${myarray[X]}各インデックスを入力するのは難しい作業です。myarraymyarray

上記のbashスクリプトを繰り返し変更するにはどうすればよいですかmyarray

fordoおよびdone部分が入力として扱われるため、以下は機能しませんmybinary

#!/bin/bash

myarray=("Alice" "Bob" "Charlie" "q") # q quits the binary

mybinary -f inputfile.txt -o outputfile.txt<<EOF
for element in "${myarray[@]}"
do
${myarray[0]}
${myarray[1]}
${myarray[2]}
${myarray[3]}
done
EOF

さらに、単にforループを配置することもできませんについてmybinary何度も電話したくないので電話してくださいmybinaryそれでは、配列の要素を入力として使用するために配列を繰り返すにはどうすればよいですかmybinary

ベストアンサー1

printf配列の各項目の後に改行文字を追加できます。

myarray=("Alice" "Bob" "Charlie" "q")

mybinary -f inputfile.txt -o outputfile.txt<<EOF
$(printf '%s\n' "${myarray[@]}")
EOF

didal24とSteeldriverが指摘したように、ここで説明したようにパイプを代わりに使用することもできます。

printf '%s\n' "${myarray[@]}" | mybinary -f inputfile.txt -o outputfile.txt

おすすめ記事