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 |
这里的区别在于如何将参数传递给
这是:
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="" |