KornShell Printf - 填充字符串

时间:2009-11-13 16:07:58

标签: string shell unix scripting ksh

我正在尝试编写一个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制作固定宽度文件的方法。

2 个答案:

答案 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 上运行。)

相关问题