String KornShell Printf-填充字符串
我正在尝试编写一个KornShell(ksh)函数,它使用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
'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 '