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中运行脚本,但为什么结果差异如此之大?
答案 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
作为第一行。