$ echo $-
himBHs
$ set -h
$ set -i
bash: set: -i: invalid option
set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
$ set -m
$ set -B
$ set -H
$ set -s
bash: set: -s: invalid option
set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
因此,我无法使用此方法恢复 bash 状态
oldstate="$(set +o); set -$-" # POSIXly store all set options.
.
.
set -vx; eval "$oldstate" # restore all options stored.
如本文所述Unix 和 Linux 答案
$ bash --version
GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
编辑/结论:正如下面的答案通知,的内容$-
包括与无关的设置set
,尽管set
手册条目指出
当前的选项集可以在 $- 中找到。
这是事实,但是由于遗漏而令人困惑。
$-
记录状态时,不需要使用,因为所有选项都已经能够记录下来,以便使用重置
% restoreState=$(shopt -po ; shopt -p)
或者更有选择性地选择一组选项,例如,
shopt -po | grep -E 'brace|glob' ; shopt -p | grep glob
答案1
请注意,bash 手册页顶部附近显示
选项
内置命令描述中记录的所有单字符 shell 选项
set
(包括-o
)都可以在调用 shell 时用作选项。此外,bash
在调用时解释以下选项:
并且继续描述-i
和-s
(除了可能更为人熟知的-c
和-l
)
“此外“这是关键所在。
相关章节Bash 参考手册: