2014-06-27 69 views
0
for((i=0;i<=5;i++)) 
do 
    for ((j=1;j<=i;j++)) 
    do 
     echo -n "$j" 
    done 
    echo " " 
done 

輸出:Unix的回聲-n不工作

-n 1 

-n 1 
-n 2 

-n 1 
-n 2 
-n 3 

-n 1 
-n 2 
-n 3 
-n 4 

-n 1 
-n 2 
-n 3 
-n 4 
-n 5 

我的操作系統:SunOS的SUN4V SPARC SUN4V

我所要的輸出是:

1 
1 2 
1 2 3 
1 2 3 4 
1 2 3 4 5 
+2

您使用的是哪種shell腳本語言?編輯您的問題並將其添加到標籤。 –

+0

這可以在bash和bash的sh模擬模式下正常工作。這在zsh中甚至沒有有效的語法。由於您尚未指定使用的shell,所以無法直接給出答案或修復。請[編輯]您的問題以包含詳細信息。 – Caleb

+0

試試'printf' ...'echo -n「$ j」' - >'printf「$ j」' – anishsane

回答

5

根據the manual-n選項爲echo不可移植。在Solaris系統-n中,/usr/ucb/echo中的echo的BSD仿真支持,但不支持默認的echo。其結果是:

ksh88的和kshecho沒有一個-n選項。 csh的回聲和/usr/ucb/echo,另一方面,有一個-n選項,但不理解反斜槓轉義字符。 shksh88確定在PATH中是否首先找到/usr/ucb/echo,如果是,則它們調整內建回聲的行爲以匹配/usr/ucb/echo

爲了解決這個問題,你有幾種選擇:

  1. 切換到printf %s "$j"可移植打印字符串,不換行。 (我會建議這樣做。)

  2. 切換到\c轉義,即替換echo -n "$j"echo "$j\c"。 (如果腳本需要保持移植到BSD系統不推薦。)

  3. 下載一個屢試不爽的免費外殼如bash實現echo -n,並用它來運行你所關心的shell腳本。

  4. /usr/ucb加上PATH。這將導致echo切換到BSD兼容行爲,但也會引入其他BSD命令,可能會破壞腳本的無關部分。 (不推薦)。

0

如果-n選項不能爲你工作,你可以嘗試使用-e選項,允許使用的反斜槓字符,然後你可以在你的echo語句中使用\c。 以下是代碼示例:

for((i=0;i<=5;i++)) 
    do 
     for ((j=1;j<=i;j++)) 
      do 
       echo -e "$j \c" 
      done 
     echo " " 
    done