我希望我的目录列表输出在一个数组中。
readarray x < <( ls -la )
printf "%s" ${x[@]}
Run Code Online (Sandbox Code Playgroud)
所以我写了这个,它可以工作,但它按空格而不是换行符分开。我在 readarray 手册中找不到“换行符”参数,所以我很好奇是否有一种巧妙的方法来解决该请求。请不要建议使用find
(我被限制使用ls -la
)。
我使用 bash 4.3。
它确实按行读取,但您忘记引用${x[@]}
这意味着对它应用了 split+glob 运算符。
readarray x < <(ls -la)
printf %s "${x[@]}"
Run Code Online (Sandbox Code Playgroud)
或者从每一行中删除最后一个换行符:
readarray -t x < <(ls -la)
printf 'line: %s\n' "${x[@]}"
Run Code Online (Sandbox Code Playgroud)
或者使用split+glob运算符:
IFS=$'\n' # split on newline
set -o noglob
x=($(ls -la))
Run Code Online (Sandbox Code Playgroud)
(与 相反readarray -rt
,该方法虽然删除了空行(不太可能但并非不可能发生在 )的输出中ls -la
)
如果您想拥有没有其他ls -l
信息的文件名列表(包括隐藏的),您宁愿使用:
shopt -s nullglob dotglob
x=(*)
Run Code Online (Sandbox Code Playgroud)
与 相反ls -a
,它不包括.
也不包括..
。如果你真的想要它们,你会这样做:
shopt -s nullglob
x=(.* *)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12327 次 |
最近记录: |