我写了以下代码:
#!/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
答案 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
产生了所需的结果。