入力ファイルを取得して処理し、出力ファイルを表示する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
いいえシェルで設定します。