我想检查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有关吗?
答案 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脚本中的问题。