2016-10-20 4 views
0

ich ein Wort in X Räumen zentrieren möchten, damit ich diese Funktion schrieb:Bash-Skript kann nicht herausfinden, wie man verketten weißen Räumen

function center { 

    str=$1 
    M=$2 
    N=${#str} 

    if ((N >= M)); then 
     echo $str 
     exit 
    fi 

    P=$((M-N)) 
    HP=$((P/2)) 

    left="" 
    right="" 

    for i in [1..HP]; do : 

     left=" $left" 
     right=" $right" 

    done 

    if (((P-2*HP) == 1)); then 
     right=" "$right"" 
    fi 

    echo "HP is $HP" 



    echo "Right is |"${right}"|" 
    echo "Left is |$left|" 
    echo "str is |$str|" 

    res=$right$str$left 
    echo "$res" 

} 

Problem Materie ist nicht das, was ich nicht richtig machen kann oder übrig, um mehr als einen Whitespace zu halten. Ich habe die Vorschläge zu anderen Antworten ausprobiert, aber ich kann nicht scheinen, dass sie funktionieren. Bitte helfen Sie.

+2

'für i in [1..HP]' wird nicht funktionieren; Die Schleife wird nur einmal ausgeführt, wenn 'i' auf' [1..HP] 'gesetzt ist. Sie sollten stattdessen eine C-Style for-Schleife verwenden: 'for ((i = 0; i

+1

Sie müssen die Variable angeben, um zu vermeiden, dass benachbarte Leerzeichen kombiniert werden. – Barmar

+0

Danke Benjamin W. Nach Ihrer Korrektur funktionierte der Code. – aarelovich

Antwort

0

Versuchen Sie, diese (nach einigen Variable zitieren und einigen anderen Korrekturen):

function center { 

    str=$1 
    M=$2 
    N=${#str} 

    if ((N >= M)); then 
     echo "$str" 
     exit 
    fi 

    ((P=M-N )) 
    ((HP=P/2)) 

    left=$(printf '%*s' "$HP" "") 
    right=$left 
    (((P-2*HP) == 1)) && right=" "$right"" 

    echo "HP is $HP" 

    echo "Right is |${right}|" 
    echo "Left is |$left|" 
    echo "str is |$str|" 

    res="$right$str$left" 
    echo "$res" 

} 

Die for i in [1..HP] nicht funktionieren können.

Ein printf '%*s' "$HP" "" ist ein idiomatischer Weg, $HP Räume zu bekommen.

Ist besser, eine Variable $left zu bauen und es zu $right als die beiden zu kopieren.

+0

Danke !! Das hat funktioniert. – aarelovich

Verwandte Themen