Nas*_*dim 4 ls shell wildcards command-substitution
我决定读一本关于 Linux/Unix 的书。我已经读到了一章,他们试图解释如何将命令的输出作为扩展传递给 shell。
以下命令
file $(ls /usr/bin/* | grep zip)
给我错误“无法打开“文件名(没有这样的文件或目录)”。相反,当我这样做时
file $(ls | grep zip)
无论文件夹如何,一切都正常显示。为什么?这是某种参数限制吗?
如果我这样做
file $(ls Pictures/ | grep jpg)
我得到以下信息:
1234.jpg: ERROR: cannot open 1234.jpg (No such file or directory)
在我要列出的目录中向右移动时
nassosdim@ubuntu:~$ cd Pictures/
nassosdim@ubuntu:~/Pictures$ file $(ls | grep jpg)
打印出文件的结果
1234.jpg: JPEG image data, JFIF standard 1.01
有人可以向我解释发生了什么吗?:(
错误即将到来,因为 bash 试图*使用 glob 模式匹配将参数中的扩展为 ls。当 glob 与模式不匹配时,它总是会出现这样的错误。在*随后被传递到ls作为一个真正的星号,这不符合一个文件或者这样ls会报错!
关于你正在做的事情有几处是多余的。我知道您正在尝试学习一个结构,但让我们分解一些您刚刚完成的工作以及如何完成。
ls /usr/bin 足以列出 bin 目录中的文件,您根本不需要星号。ls,它是模棱两可的并且有潜在危险。ls /usr/bin/*zip*,但ls仍然是多余的,您可以将 glob 扩展传递给文件:file /usr/bin/*zip* 最后,find通常是查找文件的更好工具。你可以像这样做你想做的事:
$ find /usr/bin -iname '*zip*' -exec file {} +
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3183 次 |
| 最近记录: |