在“Linux Shell Scripting Cookbook”一书中
它说$@
扩展为$1
,$2
,$3
等等,$*
扩展为$1c$2c$3
,其中c
}}是IFS
的第一个字符。
$@
和$*
之间的区别是什么,IFS
的含义是什么?
答案 0 :(得分:0)
IFS是内部字段分隔符,它基本上意味着shell识别为分隔单词的内容。
所以要运行以下命令
IFS=$'\n'
会导致shell将新行识别为分隔符。
$是分配给变量的标志
但是这些数字是为脚本输入保留的。
所以$ 1将是一个变量输入,$ 2将是第二个变量输入。
$ @是传递给脚本的所有参数。
所以如果你运行命令
bash command.sh bork woof meow
这将是上面列出的变量的值
$1 = bork
$2 = woof
$3 = meow
$@ = bork woof meow
答案 1 :(得分:0)
很难改进手册中给出的解释。例如,dash(1)
说:
$@
从一个开始扩展到位置参数。当扩展发生在双引号内时,每个位置参数都会作为单独的参数展开。如果没有位置 参数,
@
的扩展生成零参数,即使@
是双引号。这基本上意味着,例如,如果$1
是“abc
”而$2
是“def ghi
”,那么"$@"
会扩展为 两个论点:"abc"
"def ghi"
我们可以通过一些示例来证明$*
和$@
之间的区别:
$ set 1 "2 3"
$ printf '"%s"\n' "$@"
"1"
"2 3"
$ printf '"%s"\n' $@
"1"
"2"
"3"
$ printf '"%s"\n' "$*"
"1 2 3"
$ printf '"%s"\n' $*
"1"
"2"
"3"
手册页还介绍了IFS
:
IFS
输入字段分隔符。通常设置为⟨space⟩,⟨tab⟩和⟨newline⟩。有关详细信息,请参阅空格分割部分。