echo $-1 显示什么?

echo $-1 显示什么?

echo $-1, echo $-2, ..的输出是什么echo $-3意思?

在我的一台 Linux 机器上,它向我显示:

echo $-1
imsBEl1
echo $-2
imsBEl2

在另一个 Linux 机器上,它显示:

echo $-1
himBH1
echo $-2
himBH2

它们映射到某些内存位置还是其他东西?

答案1

POSIX 定义$-作为:

-

(连字符。)扩展为当前选项标志(连接成字符串的单字母选项名称),如调用时指定的、通过 set 特殊内置命令或由 shell 隐式指定的。

因此,$-根据您的 shell 或调用它的方式,可能会有所不同。

1或者2在这里分开标记。当 shell 看到 unquote 时$,它​​将识别参数扩展、命令替换或算术扩展的任何候选者的开始。它看到$-并扩展了它,其余部分保持不变。

你可以看到令牌识别部分了解更多详细信息。

答案2

echo $-打印当前 shell 的选项(不带-前缀)。 12是额外的不相关标记。

答案3

添加米罗斯拉夫的答案:

echo $-打印当前 shell 的选项(不带-前缀)。 1 和 2 是额外的不相关标记。

这意味着这些选项分别适用于每台机器。

imsBEl
himBH

我研究了每个标志的含义并通过少量释义整理了以下含义。

-我

如果存在 -i 选项,则 shell 是交互式的。

-m

监控模式。作业控制已启用。

-B

shell 执行大括号扩展 (参见支撑扩展)。默认情况下此功能处于启用状态。

-s

如果存在 -s 选项,或者选项处理后没有剩余参数,则从标准输入读取命令。该选项允许在调用交互式 shell 时设置位置参数。

-E

错误跟踪

-l

使 bash 的行为就像它被作为登录 shell 调用一样

-H

哈歇尔

-H 历史扩展

默认情况下,交互式 shell 会启用此功能。

答案4

要扩展现有答案,请尝试echo "${-1}"-echo "${-2}"您将得到“错误替换”错误因为连字符不是用作-1变量名而是用于替换一个值如果变量名在它之前未定义。例如:

$ unset foo
$ echo "${foo-bar}"
bar
$ foo=test
$ echo "${foo-bar}"
test

相关内容