8

我想检查 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 有关吗?

4

2 回答 2

12

在你的:

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
于 2012-10-27T16:17:00.617 回答
5

根据bash的手册页:

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

使用${name}索引数组将导致${name[0]},然后你得到 的长度${name[0]},而不是计算整个数组的元素。因此,将字符串与整数进行比较不是问题。AFAIK,将“字符串中的整数”与“let 分配的整数”进行比较在 bash 脚本中从来都不是问题。

于 2014-01-23T07:56:55.613 回答