Bash:逐行传递文件中的参数

时间:2012-10-09 22:28:26

标签: file bash arguments

我正在逐行读取文件中的参数,但每行都有几个参数。代码的要点在

之下
cat file.txt | while read LINE ; do
    echo -e `./foo.sh "$COUNT" "$LINE"`
done

foo.sh

#!/bin/bash
echo "$2\t$3\t$4"

file.txt的

0 0 0
0 0 1
0 1 0
0 0 1

返回。请注意,它没有标签

0 0 0
0 0 1
0 1 0
0 0 1

这是我正在尝试做的更简单的例子;我的foo.sh实际上是使用参数进行sql调用。我知道我的foo.sh函数通过调试工作,所以我把它缩小到了行读者。对我出错的地方有任何帮助吗?

2 个答案:

答案 0 :(得分:2)

我认为你需要这样做:

  1. 取消引用变量
  2. 评估字符串
  3. 所以它变成了:

    echo -e `./foo.sh "$COUNT" $LINE`
    

    echo -e `eval ./foo.sh "$COUNT" "$LINE"`
    

    否则bash会将foo.sh作为单个参数调用$LINE。通过显式计算它,bash将首先生成最终的命令字符串,然后重新解释它,实际上将$LINE拆分为单独的参数。

    希望这有助于=)

答案 1 :(得分:1)

你有没有理由在echo中嵌套外部命令?这样的事情怎么样?我刚刚在foo.sh中添加了-e并在外部调用中取出了echo。

cat foo.txt | while read LINE ; do
    ./foo.sh $COUNT $LINE
done

foo.sh:

#!/bin/bash
echo -e "$2\t$3\t$4"