Linuxは配列を別々の変数に分割します。

Linuxは配列を別々の変数に分割します。

私は長年にわたってMVSでプログラミングを行ってきましたが、最近はLinuxを使ってプログラミングをしてきたので、まだLinuxの技術は優れていませんが、開発の概念はかなりよく理解されています。

私が望むのは、ファイルディレクトリを読み、拡張子が.trgであるすべてのファイルの名前を取得することです。その後、スクリプトでコンポーネントを参照してファイルの命名に使用できるように、これらの名前を取得して別の変数に保存する必要があります。ファイル名を取得するために find コマンドを使用しました。

param=`find *${file_name}*.trg

これにより、値 (ABC1099R ABC1099C) がロードされた $param 変数が生成され、この変数は ABC1099R.trg および ABC1099C.trg というディレクトリにある 2 つのファイルであるため、後でこの値を個々の変数に割り当てる必要があります。スクリプト。オンラインで何度も検索しましたが、私が見つけたすべての例は、エコーを使用して表示するか、do whileループを使用し、ループ内の個々の値を使用します。後でスクリプトで使用できるように、その変数を独自の変数に割り当てる必要があります。

最初は、次のfor doループを試しました。

for trigger_files in $param; do
    app1=(basename "{trigger_files}" .trg).dat
done

ただし、これはapp1 = ABC1099Rの最初の発生のみを提供します。

すべての項目を別々の変数に保存する必要があります。おそらく20のファイル名があります。ただし、2つのファイル名でのみ機能させることで、多くのファイル名を処理できるようです。

答え1

使用する場合、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またはでワイルドカードを使用してくださいshopt -s failglob

答え2

paramを文字列の代わりに配列として宣言できます。

declare -a param=(`find *${file_name}*.trg`)

インデックスを使用して、個々の変数にあるかのように個々の値にアクセスできるようになりました。たとえば、

echo ${param[1]}

印刷されますABC1099C.trg(配列の2番目の要素。インデックスは0から始まります)。

ファイル拡張子を削除しようとすることができます${param[1]%.*}

配列の詳細については、こちらをご覧ください。

関連情報