例如:
#!/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*
上面提到的脚本给出了三角形的答案,而没有双引号,它在差异线上一个接一个地落下。
答案 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=""