【问题标题】:I don't know what hash (#) means in zsh我不知道 zsh 中的哈希 (#) 是什么意思
【发布时间】:2016-12-31 12:57:58
【问题描述】:

curl 是我在命令行中经常使用的命令。我在使用ZSH时,发现-#选项不起作用;该选项在 BASH 中运行良好——请参见下面的代码:

ZSH:
→ curl --progress-bar www.google.com  > google.html
######################################################################## 100.0%

→ curl -# www.google.com  > google.html
zsh: no matches found: -#

BASH:
$ curl --progress-bar www.google.com  > google.html
######################################################################## 100.0%

$ curl -# www.google.com  > google.html
######################################################################## 100.0%

当然,如果我不想输入完整的选项名称(即 --progress-bar),我可以定义一个别名来解决这个问题。但我只是好奇 ZSH 的哪一部分控制了这种行为,以及是否有任何方法可以在我的任何 .zshrc 文件中自定义/重新定义这种行为。非常感谢您提供任何有用的信息!

【问题讨论】:

  • 行情。 '-#' 将模拟任何类型的 shell 本地行为。

标签: zsh


【解决方案1】:

zsh 中,如果.zshrc 具有导致curl 出现此问题的以下行

setopt extended_glob

这个选项意味着

“将 #、~ 和 ^ 字符视为文件名生成等模式的一部分。(最初的不带引号的 ~ 总是产生命名目录扩展。)”

所以我认为最好使用--progress-bar 而不是-#(或)将其包含在引号中应该保留字符原样,而不是导致外壳扩展它。

curl progress-bar option in GitHub 找到这个。

【讨论】:

  • 谢谢!引用 '-#' 工作正常!并获取相关信息!
  • @charlesqwu:您可以单击我答案左侧的小勾号以将其标记为已接受,以供将来参考。
  • 此外,问题在于默认情况下zsh 将不匹配任何内容的模式视为错误,而不是像bash 那样将其视为文字字符串。使用 setopt nonomatch 会改变这一点。
  • 虽然 OP 要求不提供别名,但提及 noglob 似乎是合理的,这可以防止此类扩展,并且不必在 ~# parm 周围加上引号:alias curl='noglob curl'跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 2016-09-19
  • 2014-02-24
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 2018-06-27
相关资源
最近更新 更多