May 10 2009
BASH: escapovaní podtržítka mezi proměnnými
Při vytváření jednoho SHELLového skriptu jsem narazil na jeden zajímavý problém, mám dvě proměnné, potřebu je zřetězit a mezi ně dát podtržítko a předhodit je jako parametr nějaké utilitě. Jelikož však většinou používám double quotes tak mě to s tím podtržítkem nemohlo projít, protože BASH si myslí, že je to celé i s podtržítkem proměnná, ona není definována a tak ji přiřadí null.
#!/bin/bash
NAME="hubert"
TIMESTAMP=`date +%F_%H%M%S`
echo "$NAME_$TIMESTAMP" # vypise pouze $TIMESTAMP bez $NAME: 2009-05-10_011835
Toto nefunguje, protože BASH zcela logicky bere $NAME_
jako proměnnou, problém ale je, že toto: "$NAME_$TIMESTAMP"
taky nefunguje, výsledek je lomítko ve výsledném stringu, asi takto: hubert_2009-05-10_011835
.
Takže malý příklad, ja to tedy funguje:
#!/bin/bash
PRED="jens"
POST="killer"
echo "$PRED_$POST" # killer
echo '$PRED_$POST' # $PRED_$POST
echo $PRED_$POST # killer
echo ""
echo "$PRED_$POST" # jens_killer
echo $PRED_$POST # jens_killer
Myslel jsem si, že BASH je jednoduchý a jasný, ale je to horší jak Céčko s makrama a pointrama :) Mám je ještě moc co učit!
A na závěr strašně zajímavé čtení na dobrou noc (četl jsme to několikrát a vždy tam najdu něco nového:): Advanced Bash-Scripting Guide: Special Characters.
22.05.2009, 17:16
a co treba:
echo “${PRED}_${POST}”
22.05.2009, 17:37
Perfektni! Dalsi varianta :)
Ja jsem ty slozene zavorky zkousel ale udelal jsem chybu v zapisu:
"{$PRED}_{$POST}"
a tak me to nefugovalo. Ten muj zapis bude fungovat v PHP, nikoliv v BASHi. Za pripominku diky!