将文件的内容循环到参数

时间:2018-05-25 04:50:51

标签: bash file loops arguments sh

所以你们都知道这个吗? Looping through the content of a file in 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时,我希望它用pear_fruit替换$ 1,用pear_veggie替换$ 2,依此类推。

相关的小问题

而且,为了让这个工作,你在输入这个脚本时不添加任何参数

script.sh
或者你真的要把东西放进去,如果你做了什么?因为论证总是会改变。

script.sh mystery mystery mystery

2 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

三行,三行read

while IFS= read -r l1
      IFS= read -r l2
      IFS= read -r l3
do
    echo "$l1, $l2, and $l3"
done <<EOF
apple_fruit
apple_veggie
veggie_fruit
pear_fruit
pear_veggie
veggie_fruit
EOF

输出

apple_fruit, apple_veggie, and veggie_fruit
pear_fruit, pear_veggie, and veggie_fruit

这里没有真正的理由涉及位置参数;只使用常规变量。