在bash或zsh中,"$-" 表示当前 shell 的选项标志。

3
今天我发现变量 '$-' 是一个随机字符串,但是我不知道它代表什么含义。
➜  ~ echo $-
569JNRTXZghikms

而且我无法更改该值:

  ~ -='sss'
zsh: command not found: -=sss
  ~ 

而在 Docker 中,它是这样的:

➜  ~ docker  run --rm -ti ubuntu          
root@7084255fd54e:/# echo $-
himBH

或者:

➜  ~ docker  run --rm -ti alpine ash
/ # echo $-
smi

它的值是否与系统有关?

通过一个例子来解释,http://tldp.org/LDP/abs/html/internal.html#EX34 - Inian
您可以通过使用“set”更改shell选项来更改报告的内容。 - David C. Rankin
1
你已经给这个问题打上了“bash”的标签,但是显然你正在使用“zsh”。Docker正在使用“bash”,所以字符串是不同的。请编辑标签为正确的值。 - user2350426
谢谢大家。现在我明白了。 - wrfly
@JonathanLeffler 这个问题是关于zsh的。我不认为它是你链接的那个问题的完全重复。 - user2350426
3个回答

1

$- 当前设置为 shell 的选项。

来自Bash 参考手册:

使用‘+’而不是‘-’会关闭这些选项。这些选项也可以在调用 shell 时使用。当前的选项集可以在 $- 中找到。

剩余的 N 个参数是位置参数,并按顺序分配给 $1、$2、… $N。特殊参数 # 设置为 N。

返回状态始终为零,除非提供了无效选项。


0

0

由于您正在使用zsh,请运行此命令:

LESS=+/'PARAMETERS SET BY THE SHELL' man zshparam

查找:

- <S> 在调用shell时或通过set或setopt命令设置的标志。


对于 bash(来自 Docker),运行以下命令:

LESS=+/'^ *Special Parameters' man bash

阅读:

- 展开为当前通过set内置命令或shell本身设置的选项标志(例如-i选项)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接