あなたは皆これを知っていますか? Bashのファイルのコンテンツをループする
だから私がやりたいのは、ファイルの内容を引数にループすることです。どの変更出力など
私が試したもの:
while read $1 & $2 & $3; do
#also tried:
#while read $1 $2 $3; do
echo ${1}
echo ${2}
echo ${3}
./${1}.sh & ./${2}.sh & ./${3}.sh
done <file.txt
結果:
#arguments aren't echoed
./script.sh: line 31: ./.sh: No such file or directory
./script.sh: line 31: ./.sh: No such file or directory
./script.sh: line 31: ./.sh: No such file or directory
#scripts aren't executed
file.txtの内容
apple_fruit
#$1
apple_veggie
#$2
veggie_fruit
#$3
pear_fruit
#$1
pear_veggie
#$2
veggie_fruit
#$3
これは、このパターンでこのようにループします^^
また、ファイルをこれに変更しようとしました:
apple_fruit apple_veggie veggie_fruit
pear_fruit pear_veggie veggie_fruit
手短に:$1をapple_fruitに、$2をapple_veggieに、$3をveggie_fruitに置き換えたいです。次に、
done
にヒットしたとき$1をpear_fruitに、$2をpear_veggieに、などのように置き換えたいです。
また、これを機能させるために、このスクリプトを入力するときに引数を追加しませんか
script.sh
それとも、実際に何かを入れなければならないのですか?なぜなら、議論は常に変化するからです。
script.sh mystery mystery mystery
回答 2 件
あなたはbash
readarray
を使うことができます 行を配列に読み込むための組み込み(line
):readarray line < file.txt echo ${line[@]}
出力:
apple_fruit apple_veggie veggie_fruit pear_fruit pear_veggie veggie_fruit
その後、あなたはできる
printf './%s.sh & ' "${line[@]}" | sed 's/ \& $//'
どの出力
./apple_fruit.sh & ./apple_veggie.sh & ./veggie_fruit.sh & ./pear_fruit.sh & ./pear_veggie.sh & ./veggie_fruit.sh
3行、3つの
read
s:出力は
ここで位置パラメータを使用する本当の理由はありません。通常の変数を使用するだけです。