微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bash中的“$@”和“$*”有什么区别?

参见英文答案 > What is the difference between $@ and $* in shell scripts?3答案在我看来,他们都存储所有的命令行参数。

那么两者之间有区别吗?

区别是微妙的; “$ *”创建一个由$ IFS变量分隔的参数,而“$ @”将扩展为单独的参数。例如,考虑:
for i in "$@"; do echo "@ '$i'"; done
for i in "$*"; do echo "* '$i'"; done

使用多个参数运行时:

./testvar foo bar baz 'long arg'
@ 'foo'
@ 'bar'
@ 'baz'
@ 'long arg'
* 'foo bar baz long arg'

更多细节:

http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters

$ *

扩展为位置参数,从一个开始。当扩展出现在双引号内时,它扩展为单个单词,每个参数的值由IFS特殊变量的第一个字符分隔。也就是说,“$ *”等价于“$ 1c $ 2c …”,其中c是IFS变量值的第一个字符。如果未设置IFS,则参数由空格分隔。如果IFS为null,则连接参数时不插入分隔符。

$ @

扩展为位置参数,从一个开始。当扩展出现在双引号内时,每个参数扩展为单独的单词。也就是说,“$ @”等价于“$ 1”“$ 2”….如果在单词中出现双引号扩展,则将第一个参数的扩展与原始单词的开头部分合并,最后一个参数的扩展与原始单词的最后一部分连接。当没有位置参数时,“$ @”和$ @展开为无(即,它们被删除)。

原文地址:https://www.jb51.cc/bash/389366.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐