通过管道 ls 到其他程序与循环通配符

通过管道 ls 到其他程序与循环通配符

我正在读关于解析 ls 的陷阱给出的示例是关于使用 for/while 循环 ls 的。文章标题说“解析 ls” - 这是否意味着将 ls 的输出通过管道传输到 awk 和其他程序同样糟糕?

ls /my/path/ | awk '{print $NF}'

当将 ls 的输出通过管道传输到其他程序时,是否最好循环使用 glob?

for p in /my/path/*; do
    echo "$p" | awk '{print $NF}'
done

我认为由于 ls 可能会输出换行符等,因此将 ls 直接管道传输到其他程序也是“一种不好的做法”,但我在这方面没有看到太多信息。

答案1

虽然循环 glob 比通过管道传输 的输出更安全ls,但请记住, 的输出ls与您所做的一样危险。如果您是系统的唯一用户,并且您对命名文件很明智,那么管道ls并不是什么大问题。正如您的文章提到的,只有当您开始在文件名中添加奇怪的字符(换行符、管道等)时,才会出现这些问题。当使用在一大群人之间共享的系统或具有由某些程序随机生成的文件时,我实际上只会关心安全管道 ls 。对于私人计算机上的一般用途,合理的文件命名可能比编写循环更简单。

相关内容