Ellenőriztem a változó olvasási hosszát (a szkript korlátozva van a beillesztett öt karakterre), valami ilyesmire gondolok ez:
#!/bin/bash read string check=${#string} echo $check if [ $check -ge 5 ]; then echo "error" ; exit else echo "done" fi
létezik “elegánsabb” megoldás?
Megjegyzések
nincs interaktív használatra szánt funkciókkal terhelve.
dash
' s ${#string}
karakterek helyett megadná a bájtok számát. Válasz
M érc elegáns? Nem
Rövidebb? Igen 🙂
#!/bin/bash read string if [ ${#string} -ge 5 ]; then echo "error" ; exit else echo "done" fi
És ha nincs problémája nagyobb eleganciával kereskedni az alacsonyabbság mellett, akkor 2 sorral kevesebb szkriptet használhat:
#!/bin/bash read string [ ${#string} -ge 5 ] && echo "error" || echo "done"
Használhat dupla zárójelet, ha úgy gondolja, hogy biztonságosabb. Magyarázat itt .
Válasz
Bourne-kompatibilis alternatíva (${#string}
a POSIX, de nem Bourne (nem az, hogy manapság valószínűleg valaha is találkozna egy Bourne-héjjal):
case $string in ?????*) echo >&2 Too long; exit 1;; *) echo OK esac
Ne feledje, hogy mind a ${#string}
, mind a ????
esetében attól függ, hogy a bájtok vagy a karakterek száma lesz-e. A shell. Általában (és ezt a POSIX előírja) a karakterek száma. De néhány olyan kagylóhoz, mint például a dash
, amelyek nem tudnak több bájtról, helyette bájtok lesznek.
mksh
, szükséged van set -o utf8-mode
-re (UTF-8 nyelveken), hogy megértsd a többbájtos karaktereket:
$ 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
Megjegyzések
- nem a téma, de
echo Too long
eltér a motorháztető alatt aecho 'Too long'
- És ha csak akkor nyomtat, amikor ' s " túl hosszú ", még jobban tömöríthetem a
if
opciómat 🙂 - @StevenPenny,
echo Too long
két argumentumot (Too
éslong
) ad átecho
amelyecho
kimenetek szóközzel elválasztva (és új sorral), míg azecho 'Too long'
mezőben egyToo long
argumentum a amelyet új sorral követve jelenít meg. Tehát ' a funkcionális megfelelője.
/bin/sh
. Fontolja meg a shebang sor megváltoztatását#!/bin/sh
, hogy jobban hordozható legyen és olyan környezetben futtasson, ahol a bash nem ' t érhető el. Ráadásul a/bin/sh
lehet, hogy egy könnyebb héj, például kötőjel, amely nem “bf939ae919″>