使用 source 与 bash 命令

使用 source 与 bash 命令

测试文件

mkdir test
echo $1
echo $2

看起来下面两个命令的作用相同。它们一样吗?如果不是,我该如何修改我的示例以显示差异?

cat test.sh | bash -s hi bye
source test.sh hi bye

答案1

不同之处在于,如果你尝试更改当前 shell 的环境(即设置 shell 或环境变量)。例如

$ cat test.sh
myVariable=foo
$ unset myVariable; source test.sh; echo ${myVariable:-null}
foo
$ unset myVariable; bash -s < test.sh; echo ${myVariable:-null}
null

其用途如下source:在当前 shell 中评估脚本。启动新的 bash 进程时,它无法改变父进程的环境。

相关内容