返回

shell 数组 ${array[@]} 与 ${array[*]} 的用法和区别

电脑技巧

shell 数组详解:{array[@]} 和 {array[*]} 的用法

什么是 shell 数组?

在 shell 编程中,数组是一种数据结构,用于存储一系列相关数据。数组使用花括号 {} 定义,元素由逗号 分隔。例如,以下代码定义了一个名为 array 的数组,其中包含数字 1、2、3、4 和 5:

array=(1 2 3 4 5)

如何访问数组元素

要访问数组元素,可以使用下标。下标从 0 开始,代表数组中的第一个元素。例如,以下代码访问数组 array 的第一个元素:

echo ${array[0]}

输出:

1

{array[@]} 和 {array[*]}

除了使用下标访问数组元素外,还可以使用 $array[@]$array[*] 访问数组的所有元素。这两个表达式的区别在于返回结果不同:

  • $array[@] 返回数组中的所有元素,作为一个整体。
  • $array[*] 返回数组中的每个元素,作为一个单独的元素。

使用场景

  • $array[@] 通常用于需要将数组中的所有元素作为一个整体处理的情况。例如,将数组中的所有元素连接成一个字符串:
string=$(echo ${array[@]})
echo $string

输出:

1 2 3 4 5
  • $array[*] 通常用于需要单独访问数组中的每个元素的情况。例如,遍历数组并对每个元素进行操作:
for i in ${array[*]}; do
  echo $i
done

输出:

1
2
3
4
5

代码示例

以下是一些使用 $array[@]$array[*] 的代码示例:

  • 计算数组中元素的总和
array=(1 2 3 4 5)
sum=0
for i in ${array[*]}; do
  sum=$((sum + i))
done
echo $sum

输出:

15
  • 查找数组中最大值
array=(1 2 3 4 5)
max=${array[0]}
for i in ${array[*]}; do
  if [ $i -gt $max ]; then
    max=$i
  fi
done
echo $max

输出:

5

常见问题解答

  1. 什么时候使用 $array[@],什么时候使用 $array[*]

    根据您需要如何处理数组元素,使用 $array[@]$array[*]。如果您需要将数组中的所有元素作为一个整体处理,请使用 $array[@]。如果您需要单独访问数组中的每个元素,请使用 $array[*]

  2. $array[@]$array[*] 的返回结果有什么区别?

    $array[@] 返回数组中的所有元素,作为一个整体。$array[*] 返回数组中的每个元素,作为一个单独的元素。

  3. 我可以同时使用 $array[@]$array[*] 吗?

    可以,但是不建议同时使用。在大多数情况下,您只需要使用一种表达式。

  4. 如何将字符串数组存储在 shell 中?

    将字符串数组存储在 shell 中,使用引号将字符串括起来。例如,以下代码定义了一个名为 string_array 的字符串数组:

string_array=("hello" "world" "!")
  1. 如何在 shell 中遍历关联数组?

    要遍历关联数组,可以使用 for 循环和 keyvalue 变量。例如,以下代码遍历关联数组 assoc_array

for key in ${!assoc_array[@]}; do
  value=${assoc_array[$key]}
  echo "$key: $value"
done

总结

$array[@]$array[*] 是访问 shell 数组元素的两种强大方式。了解这两种表达式的区别和如何使用它们对于编写高效且可维护的 shell 脚本至关重要。