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

前端之家收集整理的这篇文章主要介绍了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.f2er.com/bash/389366.html

猜你在找的Bash相关文章