在新版本的 MacOS 中,我不得不切换到 zsh,现在我必须在参数周围添加双引号,否则它将不起作用

在新版本的 MacOS 中,我不得不切换到 zsh,现在我必须在参数周围添加双引号,否则它将不起作用

我想恢复旧的 bash 行为,这可能吗?

使用 bash 我写了简单的内容:

youtube-dl https://www...

现在我必须写:

youtube-dl "https://www..."

在其他命令中我也看到了类似的行为。这并不用户友好,并且我没有看到任何比 bash 更好的改进,我只需要它作为 bash 工作,但不知何故苹果现在将 zsh 作为默认设置。

所以我是否需要让 Bash 恢复旧的行为或者是否可以将 Zsh 配置得不那么严格。

答案1

当您使用包含文件名通配符的参数而未将其加引号或转义时,就会发生这种情况。在这种情况下,它可能出现?在带有参数的 URL 中。由于存在通配符,它​​会尝试将其扩展为匹配文件名的列表,而由于没有匹配文件名,它要么将其保留 (bash),要么抛出“未找到匹配项”错误 (zsh)。

最好的解决方案是正确地引用或转义任何你不想扩展的带有通配符的参数,因为偶尔一个将要匹配一个或多个文件,你的命令将会做一些你意想不到的事情。

你不想这么做吗?好吧,这是你的葬礼。你有几个选择:

  1. 告诉 zsh 允许不匹配的通配符表达式。将此命令添加到您的 ~/.zshrc:

    setopt nonomatch
    

    nonomatch表示“无匹配”,即删除“nomatch”选项,这会导致在出现不匹配的通配符时引发错误。)

  2. 切换回 bash。zsh 现在是默认的交互式 shell,但您可以在帐户设置中更改它。最简单的方法是运行chsh -s /bin/bash。但是,Apple 添加了有关 bash 被 zsh 取代的警告。如果您不想每次打开 shell 时都看到该警告,请将其添加到您的 ~/.bash_profile、~/.bash_login 或 ~/.profile(无论哪个存在):

    export BASH_SILENCE_DEPRECATION_WARNING=1
    
  3. 您可以安装最新版本的 bash 并使用它。请参阅“在 OSX 上将 bash 更新至版本 4.0”在 Ask Different 上(注意:bash 现在已经升级到 v5.something,但相同的方法有效)。

相关内容