关于shell:unix中“$ a”和$ a之间的区别是什么

What is the difference between “$a” and $a in unix

本问题已经有最佳答案,请猛点这里访问。

例如:

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh
a=0
while ["$a" -lt 10 ]
   b="$a"
   while ["$b" -ge 0 ] do
      echo -n"$b"
     b=`expr $b - 1`
   done
   echo
   a=`expr $a + 1`
done*

该脚本使上述答案中用双引号而出的三角形,它的一个不同的瀑布后,其他在线公司。


将变量扩展到其值后,将进行分词(即在空白处将值分隔为标记)和文件名通配符扩展,除非变量位于双引号内。

例子:

1
2
3
var='foo   bar'
echo No quotes: $var
echo With quotes:"$var"

意志产出:

1
2
No quotes: foo bar
With quotes: foo   bar

这里的区别在于如何将参数传递给echo函数。实际上,""将保留空白。

这是:

1
echo -n"$b"

转换为:

1
echo -n"<number><space>"

而这一点:

1
echo -n $b<space>

将忽略尾随空格并只输出数字:

1
echo -n <number>

因此,删除输出看起来"三角形"所需的所有空间。


脚本中有错误:

  • 第1个while后无do
  • 在第二个while之后的do之前没有;
  • 为什么在末尾的done*上加星号?

现在回答你的问题。如果用作参数输入:

  • "$a"是一个论点。
  • $a(不带引号)可能是多个参数:

比较:

1
2
3
4
5
v='a b';  set $v; echo"\$#=$#, \$1="$1",  \$2="$2""  
$#=2, $1="a",  $2="b"

v='a b'; set"$v"; echo"\$#=$#, \$1="$1",  \$2="$2""  
$#=1, $1="a b",  $2=""