Bash中的“$@”和“$*”有什么区别?
发布时间:2020-12-15 09:11:08 所属栏目:安全 来源:网络整理
导读:参见英文答案 What is the difference between $@ and $* in shell scripts?3答案在我看来,他们都存储所有的命令行参数。 那么两者之间有区别吗? 区别是微妙的; “$ *”创建一个由$ IFS变量分隔的参数,而“$ @”将扩展为单独的参数。例如,考虑: for i i
参见英文答案 >
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”….如果在单词中出现双引号扩展,则将第一个参数的扩展与原始单词的开头部分合并,最后一个参数的扩展与原始单词的最后一部分连接。当没有位置参数时,“$ @”和$ @展开为无(即,它们被删除)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |