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