$ 1 significa para…? sem qualquer entrada?

0

Eu tenho um programa que começa com esta linha. O que isto significa? Estou tendo problemas para pesquisar no Google por causa do cifrão.

Por que US $ 1 sem nenhum parâmetro? E o que isso quer dizer com -d aqui?

  if [ -d $1 ]; then

E o ponto-e-vírgula aparece mesmo se a condição if não for iniciada? Eu pensei que ponto-e-vírgula vem apenas no final da declaração ou no final da condição como

   if () {  };
    
por EPSILONsdfsdfdsf 09.10.2013 / 08:46

1 resposta

4

O ponto e vírgula é obrigatório, porque sem uma indicação de onde esse contexto termina (através de um ponto e vírgula, nova linha, etc), if não pode saber onde a condição termina, e o bloco condicional começa. Comparar:

$ if echo then foo then; then :; fi
then foo then
$ if echo then; then :; fi
then

-d é um teste para verificar se o próximo argumento é um diretório. De help test (porque test é equivalente a [ ):

-d FILE        True if file is a directory.

Por exemplo:

$ mkdir foo
$ if [ -d foo ]; then
>     echo foo is a dir
> fi
foo is a dir

$1 é o primeiro argumento passado para o seu programa. Por exemplo:

$ cat > script << 'EOF'
> #!/bin/sh  
> echo "$1"
> EOF
$ chmod +x script
$ ./script foo
foo

Como um aparte, você deve citar $1 aqui, porque senão ele pode se expandir em múltiplos argumentos, resultando em um erro de sintaxe de [ :

$ dir="foo bar"
$ [ -d $dir ]
sh: 2: [: foo: unexpected operator
$ [ -d "$dir" ]
$ 
    
por 09.10.2013 / 08:54

Tags