forループ内でbashスクリプトを実行し、forループから変数値を取得します。

forループ内でbashスクリプトを実行し、forループから変数値を取得します。

入力ファイルを取得して処理し、出力ファイルを表示するbashコードがあります。ただし、ディレクトリ内の特定の拡張子(.wfx)を持つすべてのファイルでコードを実行したいと思います。 1,2,3...100.wfxファイル(100個の.wfxファイル)があり、一度に出力を取得したいとします。元のbashスクリプト(grep、awk、およびsedが多く除外されています)は次のとおりです。

system_name="1"
wfxfile=${system_name}.wfx
.
.
.
echo "id1 id2 " > ${system_name}_energies.txt

上記のコードはうまくいくので、変更したくありません。スクリプト名は extract_value.sh です。入力ファイル名に "system_name"変数を使用してforループを使用できる場合は、目標を達成できると思いました。だから、スクリプトをほとんど変更しませんでした。

system_name="$i"
wfxfile=${system_name}.wfx

私は次のことを試しています。

for i in *.wfx; do system_name="{$i}"; echo $system_name; ./extract_value.sh;done

私が得るのはこれです

10_1.wfx
grep: .wfx: No such file or directory
10_2.wfx
grep: .wfx: No such file or directory
10.wfx
grep: .wfx: No such file or directory
11_1.wfx
grep: .wfx: No such file or directory
11_2.wfx
grep: .wfx: No such file or directory
1_1.wfx
grep: .wfx: No such file or directory
11.wfx
grep: .wfx: No such file or directory
12_1.wfx
grep: .wfx: No such file or directory
12_2.wfx
grep: .wfx: No such file or directory
1_2.wfx
grep: .wfx: No such file or directory

問題は間違いなくループ内で変数を誤って使用したようです。しかし、助けてくれてありがとう。

ベストアンサー1

export実行中のシェルプロセスの環境で表示できるように、シェルから変数を取得するか、コマンドライン引数として渡す必要があります。エクスポートされていないシェル変数は、同じシェルインスタンス内でのみ表示されます。

たとえば、mytest.sh は次のようになります。

#!/bin/sh
echo "cmdline arg: '$1', envvar: '$sysname'"

それから:

for i in abc def ghi; do
    export sysname="$i"
    ./mytest.sh "$i"
done

内部スクリプトに変数をsysname="$1" ./mytest.sh渡す環境を使用することもできます。sysnameいいえシェルで設定します。

おすすめ記事