ban*_*run 4 command-line bash zsh
我在 zsh 上运行了以下命令
sudo apt-get install rhythmbox*
Run Code Online (Sandbox Code Playgroud)
它产生了一个错误,当我在 bash 中运行相同的命令时它起作用了。为什么会发生这种情况?
如何使上述命令在 zsh 上工作?
Bash 将尝试评估rhythmbox*当前工作目录上的模式。由于不太可能有任何以 的序列开头的文件或目录rhythmbox,因此它不会扩展,但 Bash 会将其作为参数提供给apt-get此处。
请注意,如果您在那里有一个带有名称的文件,rhythmbox-test那么它将无法工作,因为它将被扩展并rhythmbox-test作为参数提供给apt-get.
所以,为了apt-get在 Bash shell 中可靠地使用模式,你应该总是逃避它。使用引号或反斜杠,例如
sudo apt-get install rhythmbox\*
Run Code Online (Sandbox Code Playgroud)
或者
sudo apt-get install "rhythmbox*"
Run Code Online (Sandbox Code Playgroud)
zsh 也差不多。
模式的扩展称为globbing。
touch aa ab # creates files aa and ab
ls a* # lists both files as Bash provided ls two arguments.
ls 'a*' # No such file or directory. Bash provided literally a* to ls.
ls a\* # No such file or directory. Same as above.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |