无法将 Shopt globstar 输出保存到变量



我正在尝试将shopt globstar的当前状态保存到变量中,以便我可以根据需要更改它,然后将其设置回以免更改用户的环境。

我尝试过以多种方式存储命令输出,例如 var=$(command)var=`command`但是当我测试 echo $var它总是将状态读取为"关闭",即使它不是。

gstar=$( shopt globstar )
echo "$gstar"

我希望使用 echo 来测试当前状态以对抗手动运行shopt globstar但它们不匹配。

此基本变量存储whoami命令工作正常。

您是直接运行脚本(./script.sh(还是采购脚本(. script.shsource script.sh(?

  1. 如果您直接运行它,它将拥有自己的环境,您不必担心保留用户的设置。脚本获取用户环境的副本,更改仅影响副本,而不影响原始副本。只需在脚本顶部设置您喜欢的选项即可。

    #!/bin/bash
    shopt -s globstar
    foo **/bar
    
  2. 如果是来源,那么将脚本的相关部分包装在子 shell 中要容易得多,以便它们在隔离的环境中运行。

    (
        shopt -s globstar
        foo **/bar
    )
    baz
    

我怀疑这是情况 1,因为你说它总是以off开头.

要保存 shopt 值:

if shopt -q globstar
then
  # the option is enabled
  saved_globstar=-s
else
  # the option is disabled
  saved_globstar=-u
fi

现在,您可以更改您的球星值。如果以后要将其还原到以前的状态,请执行

shopt $saved_globstar globstar

相关内容

  • 没有找到相关文章

最新更新