如何使用/shell.sh得到错误,但是.shell.sh工作



一个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中运行脚本,但为什么结果会有这么大的不同?

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

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

您当前的shell可能是bash。如果您的舍邦线路启动/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放在第一行。

最新更新