我收到错误" array.sh:3:array.sh:语法错误:"("意外"

时间:2014-08-09 19:29:56

标签: arrays bash shell ubuntu

我写了以下代码:

#!/bin/bash
#Simple array
array=(1 2 3 4 5)

echo ${array[*]}

我收到错误:     array.sh:3:array.sh:语法错误:"("意外

从我从谷歌那里得知,这可能是因为Ubuntu现在没有采取"#!/ bin / bash"默认情况下......但是我又添加了一行,但错误仍然存​​在。

我也试过执行bash array.sh,但没有运气!它打印为空白。

我的Ubuntu版本是:Ubuntu 14.04

3 个答案:

答案 0 :(得分:13)

鉴于脚本:

#!/bin/bash
#Simple array
array=(1 2 3 4 5)

echo ${array[*]}

并假设:

  • 它位于当前目录中名为array.sh;
  • 的文件中
  • 您已完成chmod +x array.sh;
  • 您在/bin/bash中安装了足够新版本的bash(您报告说您有4.3.8,这当然是新的);
  • 您正确执行

然后这应该没有任何问题。

如果您通过键入

执行脚本
./array.sh

系统会关注#!/bin/bash行并使用/bin/bash执行脚本。

如果您通过输入以下内容执行此操作:

sh ./array.sh

然后它将使用/bin/sh执行它。在Ubuntu上,/bin/sh通常是/bin/dash的符号链接,/etc/passwd是一个类似Bourne的shell,不支持支持数组。这将为您提供您报告的错误消息。

用于执行脚本的shell不受您当前正在使用的shell或source中哪个shell配置为登录shell或等效的shell的影响(除非您使用{{1} }或.命令)。

在您自己的回答中,您说通过使用chsh将默认登录shell更改为/bin/bash来解决问题。这本身不应该有任何影响。 (并且/bin/bash无论如何都是Ubuntu上的默认登录shell;你以前把它改成了其他东西吗?)

必须发生的是您将sh ./array.sh使用的命令更改为./array.sh而未实现此目的。

尝试运行sh ./array.sh,看看是否收到同样的错误。

答案 1 :(得分:3)

而不是使用sh来运行脚本,

尝试以下命令:

bash ./array.sh

答案 2 :(得分:-2)

我奇迹般地解决了这个问题。为了解决这个问题,我找到了一个链接,通过使用以下代码将其描述为已消失。执行后,问题得到了解决。

chsh -s /bin/bash adhikarisubir

grep ^adhikarisubir /etc/passwd

仅供参考,“adhikarisubir”是我的用户名

执行这些命令后,bash array.sh产生了所需的结果。