String KornShell Printf-填充字符串

String KornShell Printf-填充字符串,string,shell,unix,scripting,ksh,String,Shell,Unix,Scripting,Ksh,我正在尝试编写一个KornShell(ksh)函数,它使用printf将字符串填充到某个宽度 示例: 召唤 输出 'Hello ' 我目前有: padSpaces(){ WIDTH=$2 FORMAT="%-${WIDTH}.${WIDTH}s" printf $FORMAT $1 } 编辑:这似乎本身就起作用了,但当我在脚本中指定它时,它似乎失去了除第一个空格以外的所有空间 TEXT=`padSpaces "TEST" 10` TEX

我正在尝试编写一个KornShell(ksh)函数,它使用printf将字符串填充到某个宽度

示例:

召唤

输出

'Hello     '
我目前有:

padSpaces(){
        WIDTH=$2
        FORMAT="%-${WIDTH}.${WIDTH}s"
        printf $FORMAT $1
}
编辑:这似乎本身就起作用了,但当我在脚本中指定它时,它似乎失去了除第一个空格以外的所有空间

TEXT=`padSpaces "TEST" 10`
TEXT="${TEXT}A"
echo ${TEXT}
输出:

TEST A

我也愿意接受不使用printf的建议。我真正想了解的是一种从ksh生成固定宽度文件的方法。

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

padString() {
    WIDTH=$2
    FORMAT="%-${WIDTH}s"
    printf $FORMAT $1
}
或者,更紧凑:

padString() {
    printf "%-${2}s" $1
}
减号指示
printf
左对齐(而不是默认的右对齐)。关于命令
printf format[arg…]
的说明

参数arg按照 与格式字符串格式关联


(我刚刚安装了
ksh
来测试这个代码;它在我的机器上工作。)

你的功能对我来说很好。您的作业无法处理等号周围的空格。应该是:

SOME_STRING=$(padSpaces TEST 10)
我还冒昧地更换了背勾

您不会显示如何使用变量或如何获得显示的输出。然而,您的问题可能是您需要引用变量。下面是一个演示:

$ SOME_STRING=$(padSpaces TEST 10)
$ sq=\'
$ echo $sq$SOME_STRING$sq
'TEST '
$ echo "$sq$SOME_STRING$sq"
'TEST      '

很奇怪。除非
$2
包含一些非数字字符(在您的示例中,它没有),否则我看不到
printf
如何将参数格式化为浮点而不是字符串…我发现,缺少了一些引号,但仍然有问题,请参见上文。@Dennis-+1,你能说一下为什么空格会被吃掉吗?当
ksh
进行字段拆分(在
bash
中也称为单词拆分)时,$IFS中的字符序列在不带引号时被视为一个分隔符。试试这个:
string=$'abb\t\tc\n\nd';echo$字符串;回显“$string”
。第一个
echo
将显示“a b c d”,第二个将显示a、b和c展开,并在下面显示两行。
$IFS
的默认值是
$'\t\n'
。在我之前的注释中,在
字符串的赋值中,a和b之间应该有四个空格。在这种情况下,向他们开枪!
$ SOME_STRING=$(padSpaces TEST 10)
$ sq=\'
$ echo $sq$SOME_STRING$sq
'TEST '
$ echo "$sq$SOME_STRING$sq"
'TEST      '