¿$1 significa para...? sin ninguna entrada?

¿$1 significa para...? sin ninguna entrada?

Tengo un programa que comienza con esta línea. ¿Qué quiere decir esto? Tengo problemas para buscar en Google debido al signo del dólar.

¿Cómo es que $1 sin ningún parámetro? ¿Y qué significa -d aquí?

  if [ -d $1 ]; then

¿Y el punto y coma aparece incluso si la condición if ni siquiera comienza? Pensé que el punto y coma aparece solo al final de la declaración o al final de una condición como

   if () {  };

Respuesta1

El punto y coma es obligatorio, porque sin una indicación de dónde termina ese contexto (mediante un punto y coma, una nueva línea, etc.), ifno se puede saber dónde termina la condición y comienza el bloque condicional. Comparar:

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

-des una prueba para comprobar si el siguiente argumento es un directorio. De help test(porque testes equivalente a [):

-d FILE        True if file is a directory.

Por ejemplo:

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

$1es el primer argumento pasado a su programa. Por ejemplo:

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

Además, debes citar $1aquí, porque de lo contrario puede expandirse a múltiples argumentos, lo que resultará en un error de sintaxis de [:

$ dir="foo bar"
$ [ -d $dir ]
sh: 2: [: foo: unexpected operator
$ [ -d "$dir" ]
$ 

información relacionada