我正在写一个在Android的mksh上运行的shell脚本。在Bash中,我可以执行以下操作:
printf -v NUMBER "%d" \'"$CHARACTER"上面的命令将$CHARACTER转换为带符号的十进制数。但是mksh不支持printf。是否有仅使用mksh /ksh的内部命令的替代解决方案?
发布于 2014-05-27 23:34:03
mksh 确实在一定程度上支持,但不推荐使用。
print -nprsu[n] | -R [-en] print在标准输出上打印其参数,以空格分隔并以换行符结束。-n选项取消换行符。默认情况下,会转换某些C转义。这包括上面的反斜杠扩展中提到的那些,以及'\c',这相当于使用-n选项。可以使用-r选项禁止反斜杠扩展。-s选项打印到历史文件,而不是标准输出;-u选项打印到文件描述符n(如果省略,n默认为1);-p操作打印到协同进程(请参阅上面的协同进程)。在某种程度上,-R选项用于模拟BSD echo(1)命令,除非给出-e选项,否则该命令不会处理'\‘序列。如上所述,-n选项取消尾随换行符。printf格式参数...格式化输出。与printf(1),utili- ty大致相同,除了它使用相同的反斜杠扩展和I/O代码,并像mksh的其余部分一样热处理浮点。这通常不是mksh的一部分;但是,分销商可能已经将其添加为内置的速度hack。不要在新代码中使用。
发布于 2014-11-18 12:42:43
为了让mksh使用内置printf,需要使用printf.c构建mksh,并且需要设置构建环境变量USE_PRINTF_BUILTIN=1,这是不推荐的。然后它将拥有printf。如果你打算发布它,使其便携,那么这可能不是你想要做的。相反,我会使用更安全的"busybox printf“。大多数设备都有busybox,但要真正使脚本可移植,您需要使用mksh的"print“函数。
https://stackoverflow.com/questions/22124128
复制相似问题