May 10 2009

BASH: escapovaní podtržítka mezi proměnnými

Tag: LinuxJens @ 01:30

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.

2 komentáře k článku “BASH: escapovaní podtržítka mezi proměnnými”

  1. maciq napsal:

    a co treba:
    echo „${PRED}_${POST}“

  2. Jens napsal:

    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!