Unix-Echo -n无效

时间:2014-06-27 08:39:40

标签: shell solaris

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

输出:

-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 个答案:

答案 0 :(得分:5)

根据the manual-n的{​​{1}}选项不可移植。在Solaris系统上,echo-n的BSD仿真支持echo,但默认/usr/ucb/echo不支持echo。结果:

  

ksh88ksh的{​​{1}}没有echo选项。另一方面,-n的回声和csh有一个/usr/ucb/echo选项,但不理解反斜杠的转义字符。 -nsh确定在PATH中是否首先找到ksh88,如果是,则会调整内置回显的行为以匹配/usr/ucb/echo

要解决此问题,您有以下几种选择:

  1. 切换到/usr/ucb/echo以便在没有换行的情况下可移植地打印字符串。 (我建议这样做。)

  2. 切换到printf %s "$j"转义,即将\c替换为echo -n "$j"。 (如果脚本需要保持对BSD系统的可移植性,则不推荐使用。)

  3. 下载经过充分测试的免费shell,例如实现echo "$j\c"的{​​{1}},并使用它来运行您关注的shell脚本。

  4. bash添加到echo -n。这将导致/usr/ucb切换到符合BSD的行为,但也会引入其他BSD命令,可能会破坏脚本中不相关的部分。 (不推荐。)

答案 1 :(得分:0)

如果-n选项不起作用,您可以尝试使用-e选项启用反斜杠字符,然后您可以在\c中使用echo声明。 这是代码示例:

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