使用以下脚本时
#!/bin/bash
cd ~/Downloads
pdffiles=$(ls | grep .*\.pdf )
for pdf in $pdffiles
do
echo $pdf
done
打印的结果是每行以 1 分隔的文件名。我希望将文件名保存在同一行,因为我想使用这些名称在循环内运行更多命令。我尝试使用 -Z 标志。使用这个 xargs 时,它工作正常。
打印示例
Understand
Your
Data
and
Be
More
Productive.pdf
Regular
Expressions.pdf
谢谢
答案1
这是为什么不解析输出的典型例子ls
。
事实上,不是 grep 用空格分隔结果 - 命令替换pdffiles=$(ls | grep .*\.pdf )
会创建一个细绳随后将其for pdf in $pdffiles
分解为空格分隔的标记。
而是使用 shell glob 来构造数组:
#!/bin/bash
cd ~/Downloads
shopt -s nullglob
pdffiles=( *.pdf )
for pdf in "${pdffiles[@]}"
do
echo "$pdf"
done
也可以看看