Bash 当我试图打印数组的特定位置时,替换错误

Bash 当我试图打印数组的特定位置时,替换错误,bash,sh,Bash,Sh,我刚开始bash编程,我想打印数组的一个特定位置,但是当我尝试时,我得到了一个错误:错误的替换 #!/bin/sh user=`cut -d ";" -f1 $ultimocsv | sort -d | uniq -c` arr=$(echo $user | tr " " "\n") a=5 echo "${arr[$a]}" #Error:bad substitution 为什么?您使用的是不支持数组的“sh”。即使使用“bash”,也会出现相同的错误,因为“arr”不是数组。我不确定

我刚开始bash编程,我想打印数组的一个特定位置,但是当我尝试时,我得到了一个错误:错误的替换

#!/bin/sh
user=`cut -d ";" -f1 $ultimocsv | sort -d | uniq -c` 
arr=$(echo $user | tr " " "\n")
a=5
echo "${arr[$a]}"   #Error:bad substitution
为什么?

您使用的是不支持数组的“sh”。即使使用“bash”,也会出现相同的错误,因为“arr”不是数组。我不确定,“uniq”的“-c”是否是您想要的

我想,这就是你想要的:

#!/bin/bash
mapfile -t arr < <( cut -d ";" -f1 $ultimocsv | sort -d | uniq )
a=5
echo "${arr[$a]}"
#/bin/bash

mapfile-t arr<如何运行脚本?对于运行命令、捕获和命令输出,数组和命令替换语法之间存在混淆。部分
arr=$(echo$user | tr”““\n”)
执行后者,并将输出存储在变量arr而不是数组中。另外,您正在使用POSIX bourne shell sh作为she-bang(
#!/bin/sh
)解释器集运行,该解释器集不支持数组!。
“${arr[$a]}”
是一种表示形式,用于打印数组上索引a中的元素。您需要使用
bash
shell运行脚本,即作为
bash
或将解释器设置为
#/usr/bin/env bash
并将其作为
/
运行,在这种情况下,您可以执行
arr=($(echo$user | tr”““\n”)
,但不建议这样做,因为它会对当前的值进行分词。可能会重复