linux - 为什么使用 ./shell.sh 会出错但是 . shell.sh 有效

标签 linux bash shell

一个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/

相关文章:

linux - 如何将剪切的输出写入文件

linux - 将更多文件的行数与文件名组合起来

c - 如何使用 C 检测 Linux 中的挂起进程?

linux - 为什么 "cat/dev/urandom"挂起我的 bash 脚本?

Linux 内核抢占级别

c - 内核如何知道物理页面由两个不同的进程共享?

bash - 加入/awk : Join 2 files on a column

java - 如何让 javac 使用 .jar 的类?

shell - 如何使用 shell 脚本删除文本文件中以数字开头的行

c - execvp 和读取命令参数