unix中“$ a”和$ a之间的区别是什么?

时间:2013-07-11 05:15:05

标签: shell unix

例如:

#!/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*

上面提到的脚本给出了三角形的答案,而没有双引号,它在差异线上一个接一个地落下。

3 个答案:

答案 0 :(得分:8)

将变量扩展为其值后,将字拆分(即将值分隔为空白处的标记)和文件名通配符扩展,除非变量在双引号内。

示例:

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

将输出:

No quotes: foo bar
With quotes: foo   bar

答案 1 :(得分:3)

这里的区别在于参数如何传递给echo函数。有效" "将保留空格。

此:

echo -n "$b "

翻译为:

echo -n "<number><space>"

虽然这个:

echo -n $b<space>

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

echo -n <number>

因此,删除输出所需的所有空格,使其看起来像“三角形”。

答案 2 :(得分:0)

您的脚本中存在错误:

    在第一次do 之后
  • 没有while 在第二个;
  • 之后的do之前
  • 没有while
  • 为什么最后done*上的星号?

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

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

比较

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=""