运行带有' source '和不带有' source '的shell脚本时的奇怪行为



我期望在运行下面的脚本与源代码和没有相同的结果。奇怪的是,当我运行源代码和不运行源代码时,它给了我不同的结果。

Shell脚本

#!/usr/bin/env bash
flag="$1"
for i in ${flag//=/ }; do
echo "item: $i"
done

使用source执行

$ . ./test.sh -p=test
item: -p test
$ source ./test.sh -p=test
item: -p test

无源执行

./test.sh -p=test
item: -p
item: test

有人能告诉我有源代码和没有源代码有什么不同吗?我试过/bin/bash,/bin/sh....,还是同样的问题。

问题是source运行在您当前运行的相同shell中,./将其打开为子shell。

正在发生的事情是你正在设置IFS在你当前的shell可能在你的.bashrc的值,不包括一个空间(像$'n'),这不会得到继承时运行./,但使用source

修复只需重置IFS回其默认值:

IFS=$' tn'
source test.sh -p=test
item: -p
item: test

相关内容

  • 没有找到相关文章

最新更新