gpt4 book ai didi

bash - 子外壳中的源无法按预期工作

转载 作者:行者123 更新时间:2023-11-29 09:39:38 25 4
gpt4 key购买 nike

我注意到 bash 中有些奇怪的地方。假设我有一个包含以下内容的 toto 文件:

#!/bin/bash
export foo=2

如果我运行 source toto; echo foo=$foo , 我得到了预期的结果

foo=2

但是,如果我运行 bash -c "source toto; echo foo=$foo" , 我得到

foo=

如果我运行同样的事情

bash << EOF
source toto
echo foo=$foo
EOF

不过,如果我创建一个包含以下内容的文件 test.sh:

#!/bin/bash
echo foo=$foo

然后我运行 bash -c "source toto; ./test.sh"然后我终于得到了预期的

foo=2

有人了解这些结果吗?谢谢!

最佳答案

当你运行时

bash -c "source toto; echo foo=$foo"

您正在输入的 shell 会扩展字符串中的所有变量。那时,$foo 还没有值,所以就好像你写了

bash -c "source toto; echo foo="

如果您使用单引号而不是双引号,则不会展开变量。然后将文字命令行发送到 bash,它会展开 $foo 本身。

bash -c 'source toto; echo foo=$foo'

参见 Difference between single and double quotes in Bash

关于bash - 子外壳中的源无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39170233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com