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

Bash 无法将shopt globstar输出保存到变量,bash,shopt,Bash,Shopt,我正试图将shopt globstar的当前状态保存到一个变量中,以便在需要时对其进行更改,然后将其设置为不改变用户的环境 我尝试过以多种方式存储命令输出,例如var=$command和var=`command',但是当我使用 echo$var它总是将状态读取为关闭,即使它不是 gstar=$( shopt globstar ) echo "$gstar" 我希望使用echo测试当前状态与手动运行的shopt globstar,但它们不匹配 这个基本变量存储区与whoami命令配合使用很好。您

我正试图将shopt globstar的当前状态保存到一个变量中,以便在需要时对其进行更改,然后将其设置为不改变用户的环境

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

gstar=$( shopt globstar )
echo "$gstar"
我希望使用echo测试当前状态与手动运行的shopt globstar,但它们不匹配


这个基本变量存储区与whoami命令配合使用很好。

您是直接运行脚本。/script.sh还是源代码。script.sh还是source script.sh

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

#!/bin/bash

shopt -s globstar
foo **/bar
如果是源代码,只需将脚本的相关部分封装在子shell中,以便它们在隔离的环境中运行,就会容易得多

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

我怀疑是案例1,因为你说它总是从一开始就开始。

你是直接运行你的脚本。/script.sh还是源代码。script.sh还是source script.sh

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

#!/bin/bash

shopt -s globstar
foo **/bar
如果是源代码,只需将脚本的相关部分封装在子shell中,以便它们在隔离的环境中运行,就会容易得多

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

我怀疑是案例1,因为你说它总是从一开始就开始。

要保存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

要保存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

如果您正在编写bash脚本,它通常无法修改调用方的环境。如果您正在编写bash脚本,它通常无法修改调用方的环境。是的,脚本是通过./script.sh直接调用的,因此在这种情况下,听起来像是1,我不必担心读取状态。这是一个很棒的信息,我以前不知道,现在我正沉浸在脚本中,我真的很感谢你在这方面的帮助!是的,脚本是通过./script.sh直接调用的,所以在本例中,听起来像是1,我不必担心读取状态。这是一个很棒的信息,我以前不知道,现在我正沉浸在脚本中,我真的很感谢你在这方面的帮助!