代码之家  ›  专栏  ›  技术社区  ›  pwp

Eszett的Bash printf格式(scharves S,sharp S)占据2个位置

  •  0
  • pwp  · 技术社区  · 6 月前

    我想在bash下使用printf来格式化德语动词,如下所示:

    INFINITIV       PRATERITUM      PERFEKT         3.PERS. SING
    heißen          hieß            hat geheißen    er heißt
    kaufen          kaufte          hat gekauft     er kauft
    

    我在bash脚本中使用了一个简单的printf突击队:

    printf "%-15s %-15s %-15s %-15s %-15s\n" "INFINITIV" "PRATERITUM" "PERFEKT" "3.PERS. SING"
    printf "%-15s %-15s %-15s %-15s %-15s\n" "heißen" "hieß" "hat geheißen" "er heißt"
    printf "%-15s %-15s %-15s %-15s %-15s\n" "kaufen" "kaufte" "hat gekauft" "er kauft"
    

    但似乎埃斯泽特被视为两个角色。因此,在屏幕上,文本每次向左移动一个位置。输出为:

    pwp@linuxcomputers:~/Scripts/Test$ Deutsche-Verben-Scharf-S 
    INFINITIV       PRATERITUM      PERFEKT         3.PERS. SING                   
    heißen         hieß           hat geheißen   er heißt                      
    kaufen          kaufte          hat gekauft     er kauft
    

    我如何防止这种转变,并使printf格式达到预期效果?

    1 回复  |  直到 6 月前
        1
  •  2
  •   Cyrus    6 月前

    具有在末尾填充字符串的功能:

    pad() {
      local string="$1              "
      echo "${string:0:15}"
    }
    
    printf "%s %s %s %s\n" "$(pad "INFINITIV")" "$(pad "PRATERITUM")" "$(pad "PERFEKT")" "$(pad "3.PERS. SING")"
    printf "%s %s %s %s\n" "$(pad "heißen")" "$(pad "hieß")" "$(pad "hat geheißen")" "$(pad "er heißt")"
    printf "%s %s %s %s\n" "$(pad "kaufen")" "$(pad "kaufte")" "$(pad "hat gekauft")" "$(pad "er kauft")"
    

    输出:

    INFINITIV       PRATERITUM      PERFEKT         3.PERS. SING   
    heißen          hieß            hat geheißen    er heißt       
    kaufen          kaufte          hat gekauft     er kauft