GNU/Linux >> Linux の 問題 >  >> Linux

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

私は何年も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


Linux
  1. Linux –すべてがファイルですか?

  2. ファイルを配列に読み込みますか?

  3. Linux でのファイル編集はディスクに直接保存されますか?

  1. Linuxでファイルを移動する方法

  2. Linuxファイルのアクセス許可について

  3. Linux ディスク イメージをスパース ファイルに変換するにはどうすればよいですか?

  1. Linuxテールコマンド

  2. Linuxタッチコマンド

  3. LinuxでのCatコマンド