云计算百科
云计算领域专业知识百科平台

Shell 中 $@ 和 $* 的区别

$@ 和 $* 都表示所有位置参数,但它们有一个关键区别:

$@ 把每个参数当作独立的个体("各自为政"),$* 把全部参数当成一个整体("打包处理")。

变量行为什么时候用
$@ 每个参数独立,保持空格和引号 推荐,大多数场景
$* 所有参数合并成一个字符串 需要把所有参数当整体时

二、示例

脚本

#!/bin/bash
# test.sh

echo "=== 测试 \\$@ ==="
for arg in "$@"; do
echo "参数: $arg"
done

echo ""
echo "=== 测试 \\$* ==="
for arg in "$*"; do
echo "参数: $arg"
done

运行脚本

./test.sh a b c

输出:

=== 测试 $@ ===
参数: a
参数: b
参数: c

=== 测试 $* ===
参数: a b c

  • $@:每个参数单独一行

  • $*:所有参数合并成一个

但没有引号时差异更明显:

带空格和引号的参数

./test.sh "hello world" "foo bar"

输出:

=== 测试 $@ ===
参数: hello world
参数: foo bar

=== 测试 $* ===
参数: hello world foo bar

  • $@:保持了每个参数的引号,"hello world" 作为一个整体

  • $*:把所有东西合并成一个字符串

区别的本质:

变量存储方式相当于
"$@" ["hello world", "foo bar"] 每个参数独立,像列表
"$*" ["hello world foo bar"] 全部拼成一个字符串,像单个元素

$@ 是一组,$* 是一坨。大多数情况下用 "$@" 就可以了。

赞(0)
未经允许不得转载:网硕互联帮助中心 » Shell 中 $@ 和 $* 的区别
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!