未找到Bash中的数组

时间:2010-05-06 04:14:31

标签: linux bash

我试图在bash中声明一个数组,但是当代码运行时它说它无法找到数组。我试图用几种不同的方式写出数组的声明,但似乎无论我如何声明它我都无法让它工作。我原本试图这样声明:

candidate[1]= 0
candidate[2]= 0
candidate[3]= 0

返回的错误消息是:

votecalculation.sh: 13: candidate[1]=: not found
votecalculation.sh: 14: candidate[2]=: not found
votecalculation.sh: 15: candidate[3]=: not found

在此之后,我尝试了另一种在网上找到的解决方案:

ARRAY=( 'can1' 'can2' 'can3' )

使用它时会返回以下错误:

votecalculation.sh: 12: Syntax error: "(" unexpected

我是Bash的新手,我对阵列感到很困惑。我需要一些特定的方式来声明一个数组,还是我只是完全错了?

8 个答案:

答案 0 :(得分:6)

它可能不喜欢等号后面的空格。

其他一些想法:

  • 请确保您实际上使用bash来运行脚本,而不是sh / dash。

  • 您可以使用declare -a varname

  • 将变量显式声明为数组

答案 1 :(得分:5)

 #!/bin/bash

 myarray[0]=hello
 myarray[1]=world

 echo ${myarray[0]}
 echo ${myarray[1]}

将其保存到helloworld.bash 执行使用。 ./helloworld.bash

答案 2 :(得分:2)

尝试删除空格:

candidate[1]=0
candidate[2]=0

等等。我自己不是这方面的专家,但我认为bash需要将整个赋值表达式识别为一个单词,所以你不能在其中有空格。

答案 3 :(得分:2)

我遇到了同样的问题。我试着用./my_script.s来调用我的脚本。 ./my_script.sh我也试过" bash my_script.sh"和" sh my_script.sh"。我总是得到同样的信息:" my_array [1]:找不到命令"。

然后我看到Chris AtLee关于bash在等号后不喜欢空间的评论。

我的代码中的确切行

my_array[1] = 34
my_array[2] = 57

我删除了等号前后的空格。

my_array[1]=34
my_array[2]=57

然后,我只是在终端中尝试了以下内容,并且不再有错误消息。

$ my_script.sh
  

注意:Bash不喜欢变量定义中的空格!

希望这有助于像我这样的其他初学者!

答案 4 :(得分:1)

在第一个中,等号后应该没有空格。

candidate[1]=0
candidate[2]=0
candidate[3]=0

第二个看起来正确。你确定你的shell是bash吗?如果您还没有,请尝试在脚本顶部添加正确的hash-bang行:

#!/bin/bash
ARRAY=( 'can1' 'can2' 'can3' )

答案 5 :(得分:0)

如果您拥有正确的shebang和chmod +x scriptname,则无需使用bash scriptname启动脚本 - 您只需使用./scriptname或其所在的目录位于您的PATH,然后您可以使用scriptname启动它。

如果你有#!/bin/bash作为你的shebang并运行sh scriptname那么在命令行上选择shell会覆盖shebang。

在文件名末尾加.sh.bash没有特殊意义。有些人喜欢它只是风格或偏好的问题,因为它旨在表明脚本的类型(但仅限于用户 - 而不是系统)。

答案 6 :(得分:0)

这是一个如何定义和迭代 bash 数组的示例

from_unixtime(unix_timestamp())

输出:

#!/bin/bash
test_array=(el1 el2 el3)
for value in "${test_array[@]}";
do
  echo "$value"
done

答案 7 :(得分:-2)

可能是,舍邦的错误声明... 确保使用#!/ bin / bash作为shebang