LX-SCR-INFO-quotes-backslash-accolade
Updated 7/27/2010 01:01

quotes backslash accolades

  1. aanhalingstekens en backslash

    In de geschreven taal werken we met aanhalingstekens en afkappingstekens. We noemen ze ook vaak double quotes < " > en single quotes < ' >.

    Meer info over karakters vindt u op http://en.wikipedia.org/wiki/Typography en http://www.nationalfinder.com/html/char-asc.htm.

    In bash is er een verschil tussen

    echo "Dit is "letterlijk" $HOME"
    Dit is letterlijk /home/user

    en

    echo 'Dit is "letterlijk" $HOME'
    Dit is "letterlijk" $HOME

    Binnen in double quotes worden variabelen, parameters en command substitution nog geïnterpreteerd. Binnen in single quotes blijft alles letterlijk wat er staat.

    Kijk ook nog even naar de volgende voorbeelden met command substitution: ook de backtick wordt geïnterpreteerd binnen in double quotes, maar niet tussen de single quotes:

    $ echo "date"
    date
    $ echo "`date`"
    Tue Jun 29 14:06:14 CEST 2010
    $ echo "$(date)"
    Tue Jun 29 14:06:31 CEST 2010

    $ echo 'date'
    date
    $ echo '`date`'
    `date`
    $ echo '$(date)'
    $(date)

    Wie niet verloren wil lopen in het woud van interpretaties kan nog altijd zijn/haar heil zoeken in de backslash:

    $ datum=$(date)
    $ echo De inhoud van \$datum = $datum
    De inhoud van $datum = Tue Jun 29 14:26:19 CEST 2010

  2. accolades

    Met accolades of in het engels, braces, kun je leuke dingen doen:
    (bron: http://www.linuxjournal.com/article/7385)

    $ echo {one,two,red,blue}fish
    onefish twofish redfish bluefish

    $ echo fish{one,two,red,blue}
    fishone fishtwo fishred fishblue

    $ echo fi{one,two,red,blue}sh
    fionesh fitwosh firedsh fibluesh

    Let er wel op dat er geen spaties binnen in de accolades zitten, en ook niet tussen de accolades en de aanliggende strings. Doe je dit toch gedragen de accolades zich als een gewoon karakter:

    $ echo {one, two, red, blue }fish
    {one, two, red, blue }fish

    $ echo "{one,two,red,blue} fish"
    {one,two,red,blue} fish


    Maar indien je de spaties insluit in quotes dan werkt het toch weer wel:

    $ echo {"one ","two ","red ","blue "}fish
    one fish two fish red fish blue fish

    $ echo {one,two,red,blue}" fish"
    one fish two fish red fish blue fish


    En je kan accolades gebruiken binnen in accolades maar het resultaat is niet altijd wat je verwacht:


    $ echo {{1,2,3}1,2,3}
    11 21 31 2 3

    En nu volgen enkele nuttige voorbeelden:

    $ cp -v userguide.zip{,.bak}
    `userguide.zip' -> `userguide.zip.bak'

    $ mkdir -v {jan,lieve,helen}{.scripts,.bak,.c}
    mkdir: created directory `jan.scripts'
    mkdir: created directory `jan.bak'
    mkdir: created directory `jan.c'
    mkdir: created directory `lieve.scripts'
    mkdir: created directory `lieve.bak'
    mkdir: created directory `lieve.c'
    mkdir: created directory `helen.scripts'
    mkdir: created directory `helen.bak'
    mkdir: created directory `helen.c'

  3. accolades om strings mee te knippen

    $ zin="Dit is een lange zin, met veel karakters"
    $ echo $zin
    Dit is een lange zin, met veel karakters
    $ echo ${zin:0:8}
    Dit is e
    $ echo ${zin:8:0}

    $ echo ${zin:7:100}
    een lange zin, met veel karakters