Trebuie să verific lungimea variabilei citite (limita scriptului meu la cinci caractere inserate), mă gândesc la ceva de genul aceasta:
#!/bin/bash read string check=${#string} echo $check if [ $check -ge 5 ]; then echo "error" ; exit else echo "done" fi
există o soluție mai „elegantă”?
Comentarii
Răspuns
M minereu elegant? Nu
Mai scurt? Da 🙂
#!/bin/bash read string if [ ${#string} -ge 5 ]; then echo "error" ; exit else echo "done" fi
Și dacă nu aveți nicio problemă în tranzacționarea mai multă eleganță în favoarea de a fi mai scurt, puteți avea un script cu 2 rânduri mai puțin:
#!/bin/bash read string [ ${#string} -ge 5 ] && echo "error" || echo "done"
Puteți utiliza paranteze duble dacă credeți că este mai sigur. Explicație aici .
Răspuns
A Bourne-compatible alternativă (${#string} este POSIX, dar nu Bourne (nu că probabil că veți întâlni vreodată un shell Bourne zilele acestea)):
case $string in ?????*) echo >&2 Too long; exit 1;; *) echo OK esac
Rețineți că atât pentru ${#string} cât și pentru ????, dacă va fi numărul de octeți sau de caractere va depinde de În general (și este cerut de POSIX), este numărul de caractere. Dar pentru unele shell-uri precum dash care nu sunt conștiente de mai mulți octeți, vor fi în schimb octeți.
Cu mksh, aveți nevoie de set -o utf8-mode (în regiunile UTF-8) pentru ca acesta să înțeleagă caracterele multi-octet:
$ string=€€€ bash -c "echo "${#string}"" 3 $ string=€€€ dash -c "echo "${#string}"" 9 $ string=€€€ mksh -c "echo "${#string}"" 9 $ string=€€€ mksh -o utf8-mode -c "echo "${#string}"" 3 $ locale charmap UTF-8
Comentarii
- off topic, dar este
echo Too longdiferit sub capotă deecho 'Too long' - Și, dacă pur și simplu veți imprima când ' este " prea lung ", pot compacta și mai mult cu opțiunea mea
if🙂 - @StevenPenny,
echo Too longtrece două argumente (Tooșilong) laechocareechoieșiri separate printr-un spațiu (și urmate de o linie nouă), în timp ce înecho 'Too long', trecem unToo longargument pentru pe care îl afișează în urma unei linii noi. Deci este ' echivalent funcțional.
/bin/sh. Ar trebui să luați în considerare schimbarea liniei shebang în#!/bin/sh, astfel încât acesta să fie mai portabil și rulați în medii în care bash nu este ' t disponibil. În plus,/bin/shar putea fi un shell mai ușor, cum ar fi liniuța, care nu este ' nu este împovărat cu funcții destinate utilizării interactive.dash' s${#string}vă va oferi lungimea în număr de octeți în loc de caractere.