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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步