Unix-Echo -n无效

0 shell solaris

for(( i=0;i<=5;i++))
do
    for ((j=1;j<=i;j++))
    do
        echo -n "$j"
    done 
    echo " "
done
Run Code Online (Sandbox Code Playgroud)

输出:

-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
Run Code Online (Sandbox Code Playgroud)

我的操作系统:SunOS sun4v sparc sun4v

我希望输出为:

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)

use*_*342 5

根据手册,-n选项echo不可移植.在Solaris系统-n上,BSD仿真支持echoin /usr/ucb/echo,但默认情况下不支持echo.结果是:

ksh88的和kshecho没有一个-n选项.csh的回声和/usr/ucb/echo,在另一方面,有一个-n选项,但不明白背削减转义字符.shksh88确定是否/usr/ucb/echo在PATH中首先找到它,如果是,则它们调整echo内置的行为以匹配/usr/ucb/echo.

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

  1. 切换到printf %s "$j"不带换行符的便携式打印字符串.(我建议这样做.)

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

  3. 下载经过充分测试的免费shell,例如bash该实现echo -n,并使用它来运行您关心的shell脚本.

  4. 前面加上/usr/ucbPATH.这将导致echo切换到符合BSD的行为,但也会引入其他BSD命令,可能会破坏脚本中不相关的部分.(不建议.)