Nem azt mondom, hogy nem képes rá!
Csak azt mondom, hogy én nem ismerem, vagy valamiért nem használom.
Utóbbi lehet szimpla hülyeség is, de akár tudatos döntés is, például az olvashatóság miatt.
Ha csak egyszer kell végrehajtani, akor egy bonyolult regexp vagy bash "krikszkraksz" string manipuláció hiába gyorsabb,
ha egy év múlva én, vagy egy ezen a téren kevésbé rutinos kolléga nyúl hozzá, és félreérti a kifejezést.
A szép (olvasható, érthető, követhető) kód szerintem fontosabb mint a nyelv minden lehetőségének kihasználása.
Ilyenekre gondolok:
key="${pair%%=*}"
val="${pair##*=}"
A változó nevek miatt itt egyértelmű, hogy akkor ez most mi a szösz, de más nevekkel egy idecsöppenő emberke
lehet, hogy csak nézne, hogy mi is ez a százalék százalék egyenlő csillag?
Alább néhány részlet a scriptből, ezeket ne tudom, hogy ennyire követhetően meg lehet-e valósítani csak bash nyelven.
Függőlegesen akarom kiírni a blokk nevét, de ha túl kevés hely van neki akkor csak az első karaktert írom ki:
if [ $blockLineCount -le "$((${#statusTable}-2))" ]; then
showStatus="<object title=$statusTable>$(echo "${statusTable:0:1}" | tr '[:lower:]' '[:upper:]')</object>"
else
showStatus="$(echo "$statusTable" | tr '[:lower:]' '[:upper:]' | sed -e 's/\(.\)/\1<BR>/g')"
fi
Na, ez tipikus hibám, erősen átírásra szorul, echo helyett <<< lesz belőle, kivéve, ha ennél is jobban meg lehet csinálni.
Hmm... Most belegondolva, shortDateTime="${datetime:1:8} ${datetime:10:8}" vagy valami hasonló sokkal egyszerűbb lenne ide. :-)
shortDateTime="$(echo "$datetime" | cut -d '+' -f 1 | tr 'T' ' ')"
Ez sem szép, de legalább csak egyszer fut le:
histLines="$( grep -E "^[0-9]* (new|mail|sms|on|off) " "${outFile_Prefix}history_${pickYear}_${pickWeek}.txt" | grep -Fv "AUTO-TEST_MESSAGE" | tac)"
Ami sokat jelentene nekem, az a cut parancs bash verziója lenne, mert abból sok fut le.
Egyszerű grepet lehet csinálni if [[ "$szenakazal" == *"pici tu"* ]] formában, és a ~= esetén a regexp is muködik ha csak igen-nem felelet kell, és nem az egész sor.
Persze attól még lehet soronként ifelni, végül is, az sem egy rossz stratégia, a kérdést a grep indítások száma és a beolvasandó file mérete dönti el.