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.), if
no 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
-d
es una prueba para comprobar si el siguiente argumento es un directorio. De help test
(porque test
es 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
$1
es 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 $1
aquí, 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" ]
$