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 longelté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
ifopciómat 🙂 - @StevenPenny,
echo Too longkét argumentumot (Tooéslong) ad átechoamelyechokimenetek szóközzel elválasztva (és új sorral), míg azecho 'Too long'mezőben egyToo longargumentum 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/shlehet, hogy egy könnyebb héj, például kötőjel, amely nem “bf939ae919″>