O que “$ @” faz em um script bash? [duplicado]

6

Me deparei com este script :

#!/bin/sh
qemu-system-x86_64 -enable-kvm \
                   -m 2G \
                   -device virtio-vga,virgl=on \
                   -drive file=/home/empty/qemubl/lab.img,format=raw,if=virtio \
                   -cpu host \
                   -smp 4 \
                   -soundhw sb16,es1370 \
                   "$@"

Qual é o papel de $@ ?

Eu pesquisei man bash para $@ , mas recebi Pattern not found .

    
por DK Bose 26.03.2018 / 14:26

2 respostas

11

Sua pesquisa pode não ter resultado, porque (como steeldriver comentado ) você não escapou do $ , tente procurar por \$@ e você encontrará o seguinte em man bash - PARÂMETROS - Parâmetros especiais:

@  Expands to the positional parameters, starting from  one.   When
   the  expansion  occurs  within  double  quotes,  each  parameter
   expands to a separate word.  That is, "$@" is equivalent to "$1"
   "$2"  ...   If the double-quoted expansion occurs within a word,
   the  expansion  of  the  first  parameter  is  joined  with  the
   beginning  part  of  the original word, and the expansion of the
   last parameter is joined with the  last  part  of  the  original
   word.   When  there  are  no  positional parameters, "$@" and $@
   expand to nothing (i.e., they are removed).

Sem aspas, ele é expandido para $1 $2 $3 … ${N} , citado para "$1" "$2" "$3" … "${N}" , que é o que você deseja na maioria dos casos. Isso e a diferença para $* é muito boa explicada em o wiki bash-hackers .

    
por dessert 26.03.2018 / 14:34
5

É uma variável interna que é usada para encaminhar todos os argumentos passados para o script, para o comando que o script está chamando, neste caso qemu-system-x86_64 .

    
por dobey 26.03.2018 / 14:28