lsを配列に書き込みます(改行文字に分割)。

lsを配列に書き込みます(改行文字に分割)。

私のディレクトリを配列にリストして出力したいです。

readarray x < <( ls -la )
printf "%s" ${x[@]}

だからこれを書いて動作しますが、改行の代わりにスペースに分割されます。 readarrayのマニュアルで "newline"パラメータが見つからないため、この要求を解決するための賢い方法があるかどうか疑問に思います。使用を提案しないでくださいfind(私は使用が制限されていますls -la)。

私はbash 4.3を使用しています。

ベストアンサー1

行ごとに読みますが、引用するのを忘れました。${x[@]}これは、分割+グローブ演算子を適用したことを意味します。

readarray x < <(ls -la)
printf %s "${x[@]}"

または、各行から最後の改行文字を削除します。

readarray -t x < <(ls -la)
printf 'line: %s\n' "${x[@]}"

または使用分割+グローバルオペレーター:

IFS=$'\n' # split on newline
set -o noglob
x=($(ls -la))

(逆にreadarray -t、この方法は空行を削除します(たとえ出力に現れる可能性は少ないですがls -la))

追加情報なしでファイル名のリスト(隠しファイル名を含む)を取得するには、ls -l以下を使用することをお勧めします。

shopt -s nullglob dotglob
x=(*)

逆にls -a含めることも.含まれません..。本当にしたい場合は、次のようにします。

shopt -s nullglob
x=(.* *)

おすすめ記事