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"

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 関数はデバッグを通じて機能することがわかっているので、ライン リーダーに絞り込みました。私が間違っているところに助けはありますか?

4

2 に答える 2

2

次のいずれかを行う必要があると思います。

  1. 変数の引用を外す
  2. 文字列を評価する

したがって、次のいずれかになります。

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

また

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

それ以外の場合、bash はfoo.shpassing$LINEを単一のパラメーターとして呼び出します。明示的に評価することにより、bash は最初に最終的なコマンド文字列を生成し、次にそれを再解釈して、実際$LINEには個別の引数に分割します。

これが役立つことを願っています=)

于 2012-10-09T22:37:41.190 に答える
1

エコーで外側のコマンドをネストしている理由はありますか? このようなものはどうですか?foo.sh のエコーに -e を追加し、外側の呼び出しでエコーを取り出しました。

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 に答える