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

时间:2012-02-26 10:00:16

标签: 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)。我知道不同之处在于后者提出了一个新的shell进程,而前者在当前shell中运行脚本,但为什么结果差异如此之大?

2 个答案:

答案 0 :(得分:8)

区别不是叉子,而是不同的炮弹。 .源文件在当前shell中,./ar_test.sh运行可执行文件,默认shell(/ bin / sh),可能不支持数组。使用shebang作为脚本的第一行来指定正确的shell:

#!/bin/bash
...other code goes here...

答案 1 :(得分:2)

您当前的shell可能是bash。如果您的shebang-line开始/bin/sh,那么VAR=(aa bb cc)将无效。使用source.命令), the script will run in your current shell (that is, bash`)。

确保脚本的第一行是:

#!/bin/bash

在新shell中启动脚本的另一种方法是bash ar_test.sh

回应评论中激烈的讨论:如果您希望将脚本保存在可能未在其标准位置安装bash的系统上,则应将#!/usr/bin/env bash作为第一行。