我正在尝试编写一个KornShell(ksh)函数,该函数使用printf将字符串填充到一定宽度。
示例:
呼叫
padSpaces Hello 10
输出
'Hello '
我目前有:
padSpaces(){
WIDTH=$2
FORMAT="%-${WIDTH}.${WIDTH}s"
printf $FORMAT $1
}
编辑:这似乎是有效的,但是当我在脚本中分配它时,它似乎失去了除第一个空间之外的所有空间。
TEXT=`padSpaces "TEST" 10`
TEXT="${TEXT}A"
echo ${TEXT}
输出:
TEST A
我也对那些不使用printf的建议持开放态度。我真正想要的是一种从ksh制作固定宽度文件的方法。
答案 0 :(得分:4)
你的功能对我来说很好。您的作业不适用于等号周围的空格。它应该是:
SOME_STRING=$(padSpaces TEST 10)
我也冒昧地更换了反引号。
您没有显示如何使用变量或如何获得您显示的输出。但是,您的问题可能是您需要引用变量。这是一个演示:
$ SOME_STRING=$(padSpaces TEST 10)
$ sq=\'
$ echo $sq$SOME_STRING$sq
'TEST '
$ echo "$sq$SOME_STRING$sq"
'TEST '
答案 1 :(得分:2)
您是否知道您定义了一个名为padSpaces
的函数,但又调用了一个名为padString
的函数?无论如何,试试这个:
padString() {
WIDTH=$2
FORMAT="%-${WIDTH}s"
printf $FORMAT $1
}
或者,更紧凑:
padString() {
printf "%-${2}s" $1
}
减号告诉printf
左对齐(而不是默认的右对齐)。关于命令printf format [ arg ... ]
的{{3}}状态,
参数 arg 按照标准输出打印 与格式字符串 format 相关联的manpage。
(我刚刚安装ksh
来测试此代码;它可以在我的机器 TM 上运行。)