Pau*_*ce. 18
这会告诉您名为"var"的标量变量的值中有多少个字符:
echo ${#var}
Run Code Online (Sandbox Code Playgroud)
这告诉你名为"array"的数组中的元素数量:
echo ${#array[@]}
Run Code Online (Sandbox Code Playgroud)
这告诉你数组元素中的字符数:
echo ${#array[3]}
Run Code Online (Sandbox Code Playgroud)
如果您尝试获取数组的大小而忽略[@]索引,则获得元素0的长度:
$ array=(1 22 333 4444)
$ echo ${#array}
1
$ echo ${#array[@]}
4
$ echo ${#array[2]}
3
Run Code Online (Sandbox Code Playgroud)
如果你想要一个数组的所有元素的总长度,你可以迭代数组并添加它们,你可以使用IFS和一些类似于下面的步骤,或者你可以:
$ tmp="${array[*]}"
$ echo $(( ${#tmp} - ${#array[@]} + 1 ))
10
Run Code Online (Sandbox Code Playgroud)
因为Bash支持稀疏数组,所以要小心使用数组中的元素数作为最后一个元素的索引:
$ array=(1 22 333 4444 55555)
$ echo ${#array[@]}
5
$ array[9]=999999999
$ echo ${#array[@]}
6
$ echo ${array[${#array[@]} - 1]} # same as echo ${array[6 - 1]}
$ # only a newline is echoed since element 5 is empty (only if "nounset" option* is not set (default in most cases))
$ # when "nounset" option is set (possibly using command "set -u") then bash will print such error:
$ # bash: array[${#array[@]} - 1]: unbound variable
$ unset "array[1]" # always quote array elements when you unset them
$ echo ${#array[@]}
5
$ echo ${array[${#array[@]} - 1]} # same as echo ${array[5 - 1]}
55555
Run Code Online (Sandbox Code Playgroud)
那显然不是最后一个因素.要获得最后一个元素:
$ echo ${array[@]: -1} # note the space before the minus sign
999999999
Run Code Online (Sandbox Code Playgroud)
请注意,在即将发布的Bash 4.2中,您可以echo ${array[-1]}获取最后一个元素.在4.2之前的版本中,负下标会出现错误的下标错误.
要获取最后一个元素的索引:
$ idx=(${!array[@]})
$ echo ${idx[@]: -1}
9
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
$ last=${idx[@]: -1}
$ echo ${array[last]}
999999999
Run Code Online (Sandbox Code Playgroud)
迭代稀疏数组:
for idx in ${!array[@]}
do
something_with ${array[idx]}
done
Run Code Online (Sandbox Code Playgroud)
*我建议避免 nounset
Ign*_*ams 14
wc可以告诉你变量中有多少个字符和字节,而bash本身可以告诉你数组中有多少个元素.如果您正在寻找的是bash的内部结构对于保存特定变量有多大,那么我不相信它可以在任何地方使用.
$ foo=42
$ bar=(1 2 3 4)
$ echo -n "$foo" | wc -c -m
2 2
$ echo "${#bar[@]}"
4
Run Code Online (Sandbox Code Playgroud)