Portál AbcLinuxu, 5. května 2025 15:20
function prints { echo -en "[ $1 ]" }mám texty o různých delkách
prints "dasdsadas sa a asd as dasd a d" výstup z příkazu prints "dasad a dd aadasd a d" výstup z příkazu prints "dasassasd a dadddd asdaasd a asasd f fdxgh dhdfghadasd a d" výstup z příkazua výsledek je pak
[ dasdsadas sa a asd as dasd a d ] výstup z příkazu [ dasad a dd aadasd a d ] výstup z příkazu [ dasassasd a dadddd asdaasd a asasd f fdxgh dhdfghadasd a d ] výstup z příkazujenže následující text je na novém řádku a ne na konci, poztřebuji to takto, poradí někdo? Pokud to jde tak mimo použití cyklů s počítáním znaků a doplnováním mezer.
[ dasdsadas sa a asd as dasd a d ] výstup z příkazu [ dasad a dd aadasd a d ] výstup z příkazu [ dasassasd a dadddd asdaasd a asasd f fdxgh dhdfghadasd a d ] výstup z příkazu
Řešení dotazu:
man console_codes
sekce ECMA-48 CSI sequences
printf
printf
.
printf "[ %-60s ] " "dasad a dd aadasd a d"
echo
, protlačíte i přes printf
(a často snáze).
AAA="aaa sd d ada dad adadsas" echo -en "\r ]" echo -e "\r[ $AAA"
Hm, zdá se, že printf ignoruje locales. V tom případě třeba nějak takhle:
function align { local s="$1" local w="$2" if [ "${#1}" -le "$w" ]; then printf "%s%*s" "$s" $[w-${#s}] "" else echo -n "${s:0:$w}" fi }
Příště zkuste psát své příspěvky trochu srozumitelněji a hlavně konkrétněji. Z věty
To si pro každý řádek nastavit podle počtu znaků v řetězci vypočítat jiné?
by asi jen velmi zkušený jasnovidec poznal, že máte na mysli problémy se zarovnáním na předepsanou šířku, pokud řetězec obsahuje znaky s diakritikou…
Hm, zdá se, že printf ignoruje locales.
To je vlastnost printf(3):
- An optional minimum field width. If the converted value has fewer bytes than the field width, …
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.