Por que ('') dá uma lista e $ () dá apenas um argumento

0

Eu posso não dizer isso corretamente, pls edit. Digamos que eu tenha:

lst=('ls $1')
echo $lst #this gives the first element of the list

mas quando eu tentei isso:

lst=$(ls $1)
echo $lst #this gives me all the files under argument directory
    
por 夢のの夢 06.02.2016 / 22:53

3 respostas

1

No bash.

O primeiro exemplo lst=( ls $ 1 ) cria uma matriz de valores no var lst.
Como esse código mostrará:

lst=('ls .'); printf '%s\n' "${lst[@]}"

O segundo exemplo lst=$(ls $1) executa ls $1 , mas apenas a saída (concatenada como uma cadeia longa) é atribuída à var lst .

Talvez o que você quisesse comparar fosse:

lst=( 'ls $1')
lst=($(ls $1))

E, de fato, '...' é exatamente equivalente a $(...) .

E ambos os comandos criarão uma matriz de valores em lst

    
por 07.02.2016 / 02:36
2

Primeiro, por que $1 (primeiro argumento) aqui? Segundo, echo lst apenas escreverá lst , não o conteúdo da variável. Provavelmente você quer echo $lst .

Como você está usando bash(1) , a atribuição com parênteses cria uma matriz e sem índice que avalia seu primeiro elemento:

lst=(1 2 3)
echo $lst       # prints 1
echo ${lst[0]}  # prints 1
echo ${lst[1]}  # prints 2
echo ${lst[*]}  # prints 1 2 3
    
por 06.02.2016 / 23:05
2

O primeiro exemplo

lst=('ls $1')

seria o mesmo que

lst=( $(ls $1 ) )

e ambos parecem funcionar com o bash.

    
por 06.02.2016 / 23:05

Tags