フォルダ内にファイル名を保存するための配列/リストを作成しようとしています。次のコマンドは不明な理由で生成されます:
。どのように削除できますか:
?
> a=$(ls split*)
> echo $a
split_sam.o4433568 split_sam.o4433616 split_sam.o4441795 split-data-1:
答え1
) コマンド$(ls split*
番号作るすべてのファイル名 - 幸いにも!また、配列を生成しません。何したdoはワイルドカードを使用して呼び出し、すべての結果出力を一緒に貼り付け(各ファイル名間の改行を削除してls
最後に追加)、その組み合わせを変数に割り当てます。後で電話するとsplit*
ls
echo $a
追加望ましくないいくつかの処理が発生します。変数の内容は、スペース($ IFS)とワイルドカード拡張にさらに分割されます。運が良ければ、例えばsplit space file
またはsplit more*
!
混乱の原因は、split-data-1:
そのディレクトリに呼び出されたファイルがあり、そのファイルls
がユーザーに再度渡されることです。
代わりに、実際に必要なファイルに適したワイルドカードを見つけて、単純な配列割り当てを使用したいと思います。
a=(split_sam*)
または
a=(split*)
もともと作成したとおり、split-data-1:
ファイルは引き続き含まれます。
その後、ファイルを繰り返すか、全体で作業することができます。
for file in "${a[@]}"
do
ls -d -- "$file"
done
または
ls -d -- "${a[@]}"