例如:
#!/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*
上面提到的脚本给出了三角形的答案,而没有双引号,它一个接一个地落在差异线上。
变量扩展为其值后,除非变量在双引号内,否则将进行分词(即在空格处将值分隔为标记)和文件名通配符扩展。
例子:
var='foo bar'
echo No quotes: $var
echo With quotes: "$var"
将输出:
No quotes: foo bar
With quotes: foo bar
这里的区别在于参数如何传递给echo
函数。有效地" "
保留空格。
这个:
echo -n "$b "
被翻译成:
echo -n "<number><space>"
虽然这样:
echo -n $b<space>
将忽略尾随空格并仅输出数字:
echo -n <number>
因此,删除输出看起来“三角形”所需的所有空间。
您的脚本中有错误:
do
第一次之后没有while
;
在do
第 2 之后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=""