为了能到远方,脚下的每一步都不能少.|

南哈哈

园龄:3年10个月粉丝:2关注:0

Shell中 $* 和 $@ 的区别

在 shell 中,$*$@ 都表示命令行参数列表(即传递给脚本或函数的参数列表),但它们在展开时有一些微妙的区别。

$* 展开为所有位置参数列表,由一个单一的字符串表示,参数之间由第一个位置参数中的第一个字符分隔符(IFS 环境变量指定的字符,通常是空格)分隔。例如,如果在命令行上调用脚本 myscript.sh,并传递三个参数 "foo"、"bar" 和 "baz",则 "$*" 会展开为一个字符串 "foo bar baz"。

$@ 展开为所有位置参数列表,由多个独立的字符串表示,每个字符串对应一个位置参数。这些字符串不包含分隔符,可以用双引号括起来以保留空格等特殊字符。例如,如果在命令行上调用脚本 myscript.sh,并传递三个参数 "foo"、"bar" 和 "baz",则 "$@" 会展开为三个字符串 "foo"、"bar" 和 "baz"。

在大多数情况下,"$@" 更常用,因为它允许您保留参数中的空格和特殊字符,并将它们作为单独的参数传递给命令或函数。例如,下面的脚本会将传递给它的参数打印出来:

#!/bin/bash
for arg in "$@"
do
echo "$arg"
done

 

如果您将上述脚本保存为 myscript.sh,并在命令行上执行以下命令:

$ ./myscript.sh "hello world" foo bar

 

则输出将是:

hello world
foo
bar

 

如果您使用 $* 替换 $@,则会将所有参数作为单个字符串传递给 for 循环,并且将空格视为参数之间的分隔符,因此输出将是:

hello world foo bar

 

本文作者:南哈哈

本文链接:https://www.cnblogs.com/nanruosen/p/17146057.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   南哈哈  阅读(528)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起