检查数组的长度是否等于bash中的变量

时间:2012-10-27 15:42:26

标签: bash

我想检查bash数组的长度是否等于bash变量(int)。我目前的代码如下:

if [ "${#selected_columns}" -eq "${number_of_columns}" ]; then
    echo "They are equal!"
fi

返回false,因为从不运行echo语句。但是,这样做会产生4个:

echo "${#selected_columns[@]}"
echo "${number_of_columns}"

这里有什么问题?它与字符串与int有关吗?

2 个答案:

答案 0 :(得分:7)

在你的:

if [ "${#selected_columns}" -eq "${number_of_columns}" ]; then
    echo "They are equal!"
fi

${#selected_columns}缺少[@]

修正:

if [ "${#selected_columns[@]}" -eq "${number_of_columns}" ]; then
    echo "They are equal!"
fi

答案 1 :(得分:3)

根据bash的手册页:

  

$ {#name [subscript]}扩展为$ {name [下标]}的长度。如果下标是*或@,则扩展是数组中元素的数量。引用不带下标的数组变量等同于引用带有下标0的数组。

在索引数组上使用${name}将导致${name[0]},然后得到${name[0]}的长度,不计算整个数组的元素。所以这不是比较字符串和整数的问题。 AFAIK,将“字符串中的整数”与“由let分配的整数”进行比较,这绝不是bash脚本中的问题。