3

我正在尝试编写一个使用 printf 将字符串填充到特定宽度的 KornShell (ksh) 函数。

例子:

称呼

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 制作固定宽度文件的方法。

4

2 回答 2

5

你的功能对我来说很好。您的作业不适用于等号周围的空格。它应该是:

SOME_STRING=$(padSpaces TEST 10)

我也冒昧地更换了反引号。

您没有展示您如何使用变量或如何获得您展示的输出。但是,您的问题可能是您需要引用变量。这是一个演示:

$ SOME_STRING=$(padSpaces TEST 10)
$ sq=\'
$ echo $sq$SOME_STRING$sq
'TEST '
$ echo "$sq$SOME_STRING$sq"
'TEST      '
于 2009-11-13T21:31:10.060 回答
2

您是否知道您定义了一个名为 的函数padSpaces,但又调用了一个名为的函数padString?无论如何,试试这个:

padString() {
    WIDTH=$2
    FORMAT="%-${WIDTH}s"
    printf $FORMAT $1
}

或者,更紧凑:

padString() {
    printf "%-${2}s" $1
}

减号告诉printf左对齐(而不是默认的右对齐)。正如手册页中有关该命令的说明printf format [ arg ... ]

参数arg根据与格式字符串format关联的ANSI-C 格式规则打印在标准输出上 。

(我刚刚安装ksh以测试此代码;它适用于我的机器TM。)

于 2009-11-13T16:12:34.710 回答