怎么用./shell.sh得到错误但是.shell.sh工作

Yif*_*ang 1 linux bash shell

一个shell脚本:

VAR=(aa bb cc)

for i in "${VAR[@]}"
do
        echo $i;
done
Run Code Online (Sandbox Code Playgroud)

使用. ar_test.sh它时,它的工作原理.

zhangyf@zhangyf-desktop:~/test$ . ar_test.sh 
aa
bb
cc
Run Code Online (Sandbox Code Playgroud)

但是以这种方式失败了,

zhangyf@zhangyf-desktop:~/test$ ./ar_test.sh 
./ar_test.sh: 9: Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)

文件中还有其他行,因此第9行实际上是VAR =(aa bb cc).我知道不同之处在于后者提出了一个新的shell进程,而前者在当前shell中运行脚本,但为什么结果差异如此之大?

Ine*_*neu 8

差异不是分叉,而是不同的外壳..source文件在当前shell中并./ar_test.sh使用默认shell(/ bin/sh)运行可执行文件,这可能不支持数组.使用shebang作为脚本的第一行来指定正确的shell:

#!/bin/bash
...other code goes here...
Run Code Online (Sandbox Code Playgroud)