欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

{whitelist[@]} {whitelist[*]} 区别 数组 区别 merlin 有大用 有大大用

在 Bash 中,采用 "${whitelist[@]}" 和 "${whitelist[*]}" 都表示引用数组 whitelist 中的元素,但它们之间存在一个重要的区别,主要体现在空格分隔和整体引用的处理上。

1. "${whitelist[@]}"

  • 使用 @ 符号时,每个数组元素会作为单独的参数处理。

  • 如果一个元素包含空格,它将作为一个整体传递,而不会被拆分。

  • 例如,如果你有一个数组元素 ("element 1" "element 2" "element with spaces"),当你使用 "${whitelist[@]}" 时,它们将被传递为:

    • "element 1"

    • "element 2"

    • "element with spaces"

2. "${whitelist[*]}"

  • 使用 * 符号时,将所有数组元素视为单一的字符串传递。

  • 这意味着所有元素会被合并为一个字符串,元素之间用空格分隔(默认)。

  • 如果数组中有多个元素,它们会被连接在一起,例如:

    • "element 1 element 2 element with spaces"

例子

让我们看看一个具体的例子:

bash
#!/bin/bash

# 定义数组
whitelist=("aaaa" "bbbb" "cccc" "Some Other Element")

# 打印数组内容
echo "Using the @ syntax: "
for item in "${whitelist[@]}"; do
    echo "$item"
done

echo ""
echo "Using the * syntax: "
echo "${whitelist[*]}"

执行结果

  1. 使用 "${whitelist[@]}"

    text
    Using the @ syntax:
    Luxshare-Office
    Luxshare-NST
    Luxshare-MST
    Luxshare-NYB
    Luxshare-MYB
    Some Other Element
    
  2. 使用 "${whitelist[*]}"

    text
    Using the * syntax:
    aaaa bbbb cccc Some Other Element
    

适用场景

  • 如果你希望将数组的每个元素分别处理,比如在循环中进行操作或在命令中逐个传递,使用 "${whitelist[@]}"

  • 如果你想将整个数组的元素作为一个整体字符串传递,使用 "${whitelist[*]}"

总结

  • "${whitelist[@]}": 每个元素作为单独的参数处理。

  • "${whitelist[*]}": 所有元素作为一个单一的字符串处理。


普通分类: