如何构造命令行参数以传递给脚本

时间:2018-09-19 20:57:54

标签: bash

我有一个文本文件,每行包含一个字符串:

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字符串?

1 个答案:

答案 0 :(得分:3)

  1. 使用bash数组。
  2. 使用while read读取文件,请参见here。请勿使用for i in $(cat file)。不好。
  3. 正确转义参数
  4. 请勿使用``。使用$( .. )。不推荐使用。

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"