linux shell脚本中$ @和$ *有什么区别?

时间:2017-08-15 08:50:06

标签: linux shell

在“Linux Shell Scripting Cookbook”一书中

它说$@扩展为$1$2$3等等,$*扩展为$1c$2c$3,其中c }}是IFS的第一个字符。

$@$*之间的区别是什么,IFS的含义是什么?

2 个答案:

答案 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⟩。有关详细信息,请参阅空格分割部分。