测试文件
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 进程时,它无法改变父进程的环境。