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

标签 bash shopt

我正在尝试将 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 开始。

关于bash - 无法将 shopt globstar 输出保存到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54535189/

相关文章:

linux - 循环读取 bash 直到给出正确的输入

linux - 如果破折号在字符串中,则 grep -w 不是唯一的

linux - Bash 控制台命令(Codeship 控制台): how to exit from current "inputs"

bash - 没有匹配文件时如何跳过for循环?

bash - 如何在 Bash 中禁用 shopt 选项?

bash - 使 shopt 更改为本地功能

bash - 在 Bash 中合并具有相同字符串的行

bash - 无法在 Bash 4 中启用 globstar

linux - 在 Linux 中查找具有特定文件大小的文件