2013-07-11 47 views
5

例如:

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

注:「回聲-n」不工作的所有炮彈以同樣的方式,在某些系統上這將只是輸出「-n」而不是壓制換行符。 – hvd

回答

3

這裏的區別在於如何將參數傳遞給echo函數。有效地" "將保留空格。

此:

echo -n "$b " 

被翻譯成:

echo -n "<number><space>" 

這枚:

echo -n $b<space> 

將忽略尾隨的空間,將只輸出數量:

echo -n <number> 

因此刪除輸出所需的所有空間以查看「三角形」。

+0

不只是保留空白。考慮'b ='*''的情況 –

8

將變量擴展爲其值後,除非變量位於雙引號內,否則將進行單詞拆分(即將值分隔爲空格處的標記)和文件名通配符擴展。

例子:

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

將輸出:

No quotes: foo bar 
With quotes: foo bar 
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="" 
相關問題