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は、フォーマット文字列フォーマットに関連付けられたANSI-Cフォーマット規則に従って標準出力に出力され ます。

ksh(私はこのコードをテストするためにインストールしました;それは私のマシンTMで動作します。)

于 2009-11-13T16:12:34.710 に答える