我有一个文本文件,每行包含一个字符串:
input.txt:
This is Line 1
This is Line 2
我想将每一行作为参数传递给另一个脚本,例如:
consume.sh -n "This is Line 1" -n "This is Line 2"
所以我要做的是创建一个脚本来做到这一点:
file_parser.sh:
IFS=$'\n'
MY_ARGS=
for p in `cat input.txt`
do
MY_ARGS="${MY_ARGS} -n \"$p\""
done
bash consume.sh $MY_ARGS
bash好像在将整个arg括起来,就像这样:
consume.sh '-n "This is Line 1" -n "This is Line 2"'
我如何构造要传递给另一个脚本的args字符串?
答案 0 :(得分:3)
while read
读取文件,请参见here。请勿使用for i in $(cat file)
。不好。$( .. )
。不推荐使用。
args=()
while IFS= read -r line; do
args+=(-n "$line")
done < input.txt
consume.sh "${args[@]}"
您甚至可以通过一些良好的转义和评估来解决bash数组:
args=""
while IFS= read -r line; do
args+=" -n $(printf %q "$line")";
done < input.sh
eval consume.sh "$args"