为什么 var=- 不起作用?

Tom*_*ale 1 zsh

在写问题时:

如何touchcat文件命名-

我试图概括为一个命名文件-存储在变量中的情况。

在 中zsh,我尝试设置一个变量以包含单个连字符:

% var=-
% echo $var

% var='-'
% echo $var

% var=\-
% echo $var

%
Run Code Online (Sandbox Code Playgroud)

为什么这些不起作用?

为什么在这方面zsh有所不同bash

如何设置$var-

ilk*_*chu 6

同样,通常情况下,它不是变量中的实际值,而是变量如何。在echo这种情况下。Zshecho将单个破折号作为选项指示符的结尾,因此已将其删除。在线手册

请注意,为了符合标准,双破折号不会终止选项处理;相反,它是直接打印的。但是,单个破折号确实会终止选项处理,因此第一个破折号(可能跟在选项之后)不会打印,但它后面的所有内容都作为参数打印。单破折号行为与其他壳不同。有关更便携的文本打印方式,请参阅printf,有关在 zsh 中打印文本的更可控方式,请参阅print

所以我们有:

zsh% echo -

zsh% echo - -n
-n
zsh% var=-
zsh% printf "%s\n" "$var"
-
Run Code Online (Sandbox Code Playgroud)

也可以看看: