3

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

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

foo.sh

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

文件.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 函数通过调试工作,所以我将它缩小到行阅读器。对我哪里出错有帮助吗?

4

2 回答 2

2

我认为您需要执行以下任一操作:

  1. 取消引用变量
  2. 评估字符串

所以它变成了:

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

或者

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

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

希望这会有所帮助=)

于 2012-10-09T22:37:41.190 回答
1

您将外部命令嵌套在回声中是否有原因?这样的事情呢?我只是在 foo.sh 中的 echo 中添加了 -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"
于 2012-10-09T23:16:00.977 回答