这不是一个很长的问题,这是什么意思?
LogMsg "File:${@}"
LogMsg()是一种使用时间戳记录消息的方法。
但是他到底做了什么
${@}
意思?我还应该提到脚本也有1美元和2美元。 Google没有产生任何结果。
答案 0 :(得分:4)
字面上:
f() { printf '%s\n' "File: $@"; }
f "First Argument" "Second Argument" "Third Argument"
将展开并运行命令:
printf '%s\n' "File: First Argument" "Second Argument" "Third Argument"
也就是说:它扩展了您的参数列表($1
,$2
,$3
等),同时保持后续参数之间的分离(不丢弃用户提供的任何信息)通过引用)。
这与以下不同:
printf '%s\n' File: $@
或
printf '%s\n' File: $*
与以下内容相同:
printf '%s\n' "File:" "First" "Argument" "Second" "Argument" "Third" "Argument"
...这些都是字符串拆分和全局扩展参数列表,所以如果用户已经通过了,例如,"*"
(内部引号旨在使其成为文字),这里的非引用用法将替换为将其扩展为glob的结果的字符,即。当前目录中的文件列表。此外,字符串拆分还有其他副作用,例如将换行符或制表符更改为空格。
它也不同于:
printf '%s\n' "File: $*"
与:
相同printf '%s\n' "File: First Argument Second Argument Third Argument"
...正如您在上面所看到的那样,通过将第一个字符放在它们之间的IFS
(默认为空格)中来组合所有参数。
答案 1 :(得分:2)
KSH
中有两个位置参数*
和@
"$*"
是一个单个字符串,由所有位置参数组成,由变量IFS(内部字段分隔符)中的第一个字符分隔,默认情况下为空格,TAB和换行符。
另一方面,"$@"
等于"$1" "$2" … "$N "
,其中N
是位置参数的数量。
有关详细信息和示例:http://oreilly.com/catalog/korn2/chapter/ch04.html
答案 2 :(得分:1)
这是命令行的参数集。
如果通过cmd a b c d
之类的命令启动脚本,则有5个参数,$0
将是命令cmd
,$1
是第一个参数a
,{ {1}}第二个$2
等等b
将是除命令之外的所有参数。
答案 3 :(得分:0)
其他帖子没有解释的一件是使用{
。 $@
与${@}
相同,但如果需要,您可以添加字母等,但这些字母不会添加空格。你可以说${foo}dog
,如果$ foo设置为little
,结果将是littledog
,没有空格。如果${@}dogdog
和$@
设置为a b c d
,则结果为“a”“b”“c”“ddogdog”。