変数にリストを保存する

変数にリストを保存する

781名前に含まれるファイルのリストの名前を保存しようとしています。私はこのリストで何かをし、次にこのリストを削除します。

これを行うには2つのオプションがあります。

オプション1:次のコマンドを使用してリストを一時ファイルに保存できます。

ls -lart *781* | awk '{print $9}' > tempo

ファイルにはtempoリストが含まれており、使用後にファイルを削除します。

オプション2:どういうわけかリストを変数に保存し、その変数を使用できる場合。これを達成するために以下のコードを試していますが、うまくいきません。

filelist=`ls -lart *781* | awk '{print $9}'`
echo $filelist

ただし、上記のコードは何の出力も提供しません。構文の問題を助けてください。

編集する:k-shellを使用しています。

ベストアンサー1

lsファイルのリストを取得するために使用しないでください。特に、ls *これは空のディレクトリ行がたくさん提供されるため、さらにそうです。

以下を使用できます(常に良いわけではありません)。

for file in *781*; do
  echo "$file"
done

空白のあるファイルは保存されますが、他の特殊文字を持つファイルは保存されません。

次のようにすることもできます。

 find . -name "*781*" -print0 | while IFS="" read -r -d "" file; do
   echo "$file"
 done

どちらが優れていますが、すべてのUNIX(Linuxも同様)の標準ではありません。

すべての場合にスペースを区切り文字として使用することはできないため、ファイル名を単一の変数に入れないでください。おそらく、次のようにbash配列を使用できます。

declare -a file_array
while IFS="" read -r -d "" file; do
  file_array[${#file_array[@]}]="$file"
done < <(find . -print0)

プロセスの置き換えなしでkshで作業するには、次の手順を実行します。

typeset -a file_array
mkfifo mypipe
find . -print0 > mypipe &
while IFS="" read -r -d "" file; do
  file_array[${#file_array[@]}]="$file"
done < mypipe
rm mypipe

詳細については、以下を確認してください。これそしてこれ

おすすめ記事