Grep 使用空格分隔结果

Grep 使用空格分隔结果

使用以下脚本时

#!/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

也可以看看

相关内容