我试图在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的新手,我对阵列感到很困惑。我需要一些特定的方式来声明一个数组,还是我只是完全错了?
答案 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