我希望我的目录在数组中列出输出。
readarray x < <( ls -la )
printf "%s" ${x[@]}
所以我写了这个,它有效,但它按空格而不是换行符分割。我在 readarray 手册中找不到“换行符”参数,所以我很好奇是否有一种巧妙的方法来解决该请求。请不要建议使用find
(我被限制使用ls -la
)。
我使用的是 bash 4.3。
答案1
它确实按行读取,但您忘记引用${x[@]}
这意味着对其应用了 split+glob 运算符。
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=(.* *)