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
答案 0 :(得分:5)
根据the manual,-n
的{{1}}选项不可移植。在Solaris系统上,echo
中-n
的BSD仿真支持echo
,但默认/usr/ucb/echo
不支持echo
。结果:
ksh88
和ksh
的{{1}}没有echo
选项。另一方面,-n
的回声和csh
有一个/usr/ucb/echo
选项,但不理解反斜杠的转义字符。-n
和sh
确定在PATH中是否首先找到ksh88
,如果是,则会调整内置回显的行为以匹配/usr/ucb/echo
。
要解决此问题,您有以下几种选择:
切换到/usr/ucb/echo
以便在没有换行的情况下可移植地打印字符串。 (我建议这样做。)
切换到printf %s "$j"
转义,即将\c
替换为echo -n "$j"
。 (如果脚本需要保持对BSD系统的可移植性,则不推荐使用。)
下载经过充分测试的免费shell,例如实现echo "$j\c"
的{{1}},并使用它来运行您关注的shell脚本。
将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