为什么 var=- 不起作用?

为什么 var=- 不起作用?

在写问题时:

如何touch命名cat文件-

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

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

% var=-
% echo $var

% var='-'
% echo $var

% var=\-
% echo $var

%

这些为什么不起作用?

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

我该如何$var设置-

答案1

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

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

所以我们有:

zsh% echo -

zsh% echo - -n
-n
zsh% var=-
zsh% printf "%s\n" "$var"
-

也可以看看:

相关内容