sintaxe de substring bash como meio de desambiguar identificadores de variáveis de ambiente

1

Ao bashing, eu sei que, às vezes, aspas duplas são necessárias se uma variável de ambiente (EV) contiver espaços embutidos. Exemplo: "$JACK" em vez de $JACK . Às vezes, é recomendável usar a sintaxe emprestada da substring se o identificador do EV for ambíguo. Exemplo, porque o EV não é $JACKA , $JACKAN , nem $JACKAND , usaríamos chaves sem índices de substring para escrever ${JACK}ANDJILL .

Parece que as aspas duplas podem realizar a mesma coisa. Exemplo: "$JACK"ANDJILL

Na verdade, se não fizermos nada, mas echo , o seguinte demonstra a equivalência.

#!/bin/bash
TEXAS="asdf asdf"
FLORIDA="qwer""$TEXAS""qwer" # use quotes
echo $FLORIDA

ALABAMA="qwer"${TEXAS}"qwer" # use substring without indices
echo $ALABAMA

ARIZONA="qwer""${TEXAS}""qwer" # use both
echo $ARIZONA

MAINE="qwer"$TEXAS"qwer" # use neither
echo $MAINE

NEVADA="qwer""$TEXAS"qwer # last bit not quoted
echo $NEVADA

IDAHO="qwer"${TEXAS}qwer # last bit not quoted
echo $IDAHO

A saída:

    qwerasdf asdfqwer
    qwerasdf asdfqwer
    qwerasdf asdfqwer
    qwerasdf asdfqwer
    qwerasdf asdfqwer
    qwerasdf asdfqwer

Existem instruções / construções em que o truque de substring não pode ser substituído por aspas duplas?

    
por H2ONaCl 10.12.2012 / 07:03

1 resposta

1

Substring tem mais funções, como o nome diz que pode ser usado para obter uma substring de uma variável.
Por exemplo

var='123456789'
echo ${var:2:4}

A saída será

  

3456

Ao usar o array, você precisa usar substring para acessar as variáveis do array.
Por exemplo

a[0]=0
a[1]=1
a[2]=2

echo $a irá imprimir 0.
echo "$a[1]" output 0 [1]
Então, acessando a variável array no local 1 da seguinte forma

echo ${a[1]}

Isso gera 1

echo "${a[@]}" output all variable. ou seja 0 1 2 Nestes casos, substring não pode ser substituído com ""

    
por totti 14.05.2013 / 12:19