例如:
#!/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*
上面提到的腳本給三角形的答案,同時用了雙引號,它屬於一個另一個在後差異線。
例如:
#!/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*
上面提到的腳本給三角形的答案,同時用了雙引號,它屬於一個另一個在後差異線。
這裏的區別在於如何將參數傳遞給echo
函數。有效地" "
將保留空格。
此:
echo -n "$b "
被翻譯成:
echo -n "<number><space>"
這枚:
echo -n $b<space>
將忽略尾隨的空間,將只輸出數量:
echo -n <number>
因此刪除輸出所需的所有空間以查看「三角形」。
不只是保留空白。考慮'b ='*''的情況 –
將變量擴展爲其值後,除非變量位於雙引號內,否則將進行單詞拆分(即將值分隔爲空格處的標記)和文件名通配符擴展。
例子:
var='foo bar'
echo No quotes: $var
echo With quotes: "$var"
將輸出:
No quotes: foo bar
With quotes: foo bar
有你的腳本錯誤:
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=""
注:「回聲-n」不工作的所有炮彈以同樣的方式,在某些系統上這將只是輸出「-n」而不是壓制換行符。 – hvd