私は何年もMVSでプログラミングをしていて、最近Linuxを使用しているので、Linuxのスキルはまだそれほど優れていませんが、開発の概念はよく理解しています。
私がやろうとしているのは、ファイルのディレクトリを読み取り、拡張子が.trgのすべてのファイルの名前を取得することです。次に、それらの名前を取得して別々の変数に格納する必要があります。これにより、後でスクリプトでそれらを使用してコンポーネントを参照し、ファイルの命名に使用できるようになります。 findコマンドを使用してファイル名を取得しました:
param=`find *${file_name}*.trg
これにより、値(ABC1099R ABC1099C)がロードされた$ param変数が生成されました。これらは、ABC1099R.trgおよびABC1099C.trgという名前のディレクトリ内の2つのファイルであるため、後でスクリプトで使用できるように、これらの値を個々の変数に割り当てる必要があります。私はWebで高低を検索しましたが、私が見つけたすべての例は、エコーを使用してそれらを表示するか、dowhileループを使用してループ内の個々の値を使用しています。スクリプトの後半で使用できるように、それらを独自の変数に割り当てる必要があります。
最初は、次のようなfordoループを試しました。
$paramのtrigger_filesのfor trigger_files in $param; do
app1=(basename "{trigger_files}" .trg).dat
done
しかし、それは最初の出現app1 =ABC1099R
を与えるだけですすべてのオカレンスをそれぞれの変数に保存する必要があります。 20のファイル名が存在する可能性がありますが、2つのファイル名で機能させる必要があると考えたため、多くのファイル名を処理できます。
承認された回答:
bashを使用している場合は、bashの方法で使用することを検討してください。
あなたの配列はこうして得られるでしょう(外部のfind
はありません) コマンド):
params=( *${file_name}*.trg )
次に、次のように配列をループします:
for file in "${params[@]}"; do
echo "I'm happily reading the beautiful file $file"
done
.trg
を削除する場合 拡張子を付けて、.banana
に置き換えます :
for file in "${params[@]}"; do
echo "My gorilla loves the file ${file%.trg}.banana"
done
この方法は、適切な引用符を使用すると、名前に面白い記号が含まれているファイルに関して100%安全になります。
備考。 常にshopt -s nullglob
のいずれかでglobbingsを使用してください またはshopt -s failglob
。