Jakikolwiek pomysł, w jaki sposób mogę nadal umieszczać puste miejsce w wierszu za pomocą printf, tj. Gdy zmienna kolumny jest pusta? Na przykład:
printf $GREEN"################################ SOURCED ###############################"$RESET
printf $GREEN"%-1s%-15s%-60s%-1s%sn" "#"$RESET " REGION NAME:" $OS_REGION_NAME $GREEN"#"$RESET
printf $GREEN"########################################################################"$RESET
Zasadniczo tworzę pudełko z tymi pokazamizmienne źródłowe. Czasami niektóre pola są puste. Pole to nie powinno się zwijać po prawej stronie, kiedy to się dzieje. Pomyślałem, że poprawnie to zrobiłem z ustawieniami kolumn w środkowej linii, ale najwyraźniej ignoruje szerokość, jeśli kolumna jest pusta.
Wynik powinien wyglądać mniej więcej tak:
################################ SOURCED ###############################
# AUTH URL: blah blah blah #
# REGION NAME: fcdnjcndkjcndkajcndkjcnklcnklsncklsnkcldnslc #
########################################################################
ale wygląda to tak
################################ SOURCED ###############################
# AUTH URL: blah blah blah #
# REGION NAME: fcdnjcndkjcndkajcndkjcnklcnklsncklsnkcldnslc #
########################################################################
ROZWIĄZANIE
Rozwiązaniem było umieszczenie zmiennych w podwójnych cudzysłowach. Taka prosta poprawka ...
printf $GREEN"%-1s%-15s%-55s%-1s%sn" "#"$RESET " REGION NAME:" "$OS_REGION_NAME" $GREEN"#"$RESET
UWAGA
$ GREEN i $ RESET były przeznaczone do kolorowania w innej części skryptu.
Odpowiedzi:
1 dla odpowiedzi № 1Problem polega na tym, że nie udało się zacytować rozszerzenia $OS_REGION_NAME
więc kiedy jest to pusty ciąg znaków, do którego cały argument należy printf
znika (tj. printf
widzi jeden mniej argument i wszystko po tym, jak przesunie się w specyfikatorach ciągu formatów).
Powiedziawszy to, przepisałbym twoje linie w ten sposób
printf "################################ SOURCED ###############################n" "$GREEN" "$RESET"
printf "$s%-1s%-15s%-60s%-1s%sn" "$GREEN" "#$RESET" " REGION NAME:" "$OS_REGION_NAME" "$GREEN#$RESET"
printf "%s########################################################################%sn" "$GREEN" "$RESET"