一个shell脚本:
VAR=(aa bb cc)
for i in "${VAR[@]}"
do
echo $i;
done
当使用 运行它时。 ar_test.sh
,有效。
zhangyf@zhangyf-desktop:~/test$ . ar_test.sh
aa
bb
cc
但这样失败了,
zhangyf@zhangyf-desktop:~/test$ ./ar_test.sh
./ar_test.sh: 9: Syntax error: "(" unexpected
文件中还有其他行,所以第9行实际上是VAR=(aa bb cc)。我知道区别在于后者 fork 了一个新的 shell 进程,而前者在当前 shell 中运行脚本,但为什么结果差异如此之大?
最佳答案
区别不是fork,而是不同的shell。 .
当前 shell 中的源文件和 ./ar_test.sh
使用默认 shell (/bin/sh) 运行可执行文件,这可能不支持数组。使用 shebang 作为脚本的第一行来指定正确的 shell:
#!/bin/bash
...other code goes here...
关于linux - 为什么使用 ./shell.sh 会出错但是 . shell.sh 有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9452155/