在Shell脚本中,$*用于将所有参数作为一个单词输出,参数之间使用IFS变量中的第一个字符分隔,默认为空格。而$@用于将每个参数作为一个单词输出,参数之间不进行分隔。

在上述的代码中,为了在echo命令中保留参数的空格,使用了双引号"$"和"$@"。但是在echo命令中,-e选项会将转义字符进行解析,所以在输出"$"和"$@"时,转义字符也会被解析。所以在输出时,$*和$@并没有被当作变量进行解析,而是作为普通字符串输出。

可以将代码修改为如下形式,去掉echo命令中的-e选项,这样就可以正常输出参数了:

a(){
  echo "$*"
  echo 1
  echo "$@"
  echo 2
}

a 1 2 345 6 q

输出结果为:

1 2 345 6 q
1
1 2 345 6 q
2
aecho -e $echo 1echo -e $echo -e 2a 1 2 345 6 q中$ 为什么不输出

原文地址: http://www.cveoy.top/t/topic/iuMV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录