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

时间:2019-02-05 13:10:57

标签: linux bash

我正在尝试将shopt globstar的当前状态保存到变量中,以便可以根据需要进行更改,然后重新设置为不改变用户环境。

我尝试以多种方式存储命令输出,例如var=$(command)var=`command`,但是当我使用 echo $var始终将状态读取为“关闭”,即使不是这样。

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

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

此基本变量存储可以与whoami命令一起正常工作。

2 个答案:

答案 0 :(得分:3)

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

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

    #!/bin/bash
    
    shopt -s globstar
    foo **/bar
    
  2. 如果要获取源代码,只需将脚本的相关部分包装在子shell中,这样它们就可以在隔离的环境中运行。

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

我怀疑是第一种情况,因为您说它总是始于off

答案 1 :(得分:2)

要保存shopt值,请执行以下操作:

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

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

shopt $saved_globstar globstar