shell - significa - stdin bash script




${1:+"$ @"} en/bin/sh (2)

Me he dado cuenta de que a veces los scripts de envoltura usarán ${1:+"[email protected]"} para los parámetros en lugar de solo "[email protected]" .

Por ejemplo, http://svn.macosforge.org/repository/macports/trunk/dports/editors/vim-app/files/gvim.sh usa

exec "$binary" $opts ${1:+"[email protected]"}

¿Puede alguien romper ${1:+"[email protected]"} en inglés y explicar por qué sería una ventaja sobre el simple "[email protected]" ?


'Pasas histéricas', también conocidas como Razones históricas.

La explicación de JesperE (o la página de manual de Bash) es precisa para lo que hace:

Si $ 1 existe y no es una cadena vacía, sustituya la lista de argumentos citada.

Hace aproximadamente 20 años, algunas variantes menores rotas de Bourne Shell sustituyeron una cadena vacía "" por "$ @" si no existían argumentos, en lugar del correcto, el comportamiento actual de no sustituir nada. Si alguno de estos sistemas todavía está en uso está abierto a debate.

[Hmm: esa expansión no funcionaría correctamente para:

command '' arg2 arg3 ...

En este contexto, la notación correcta es:

${1+"[email protected]"}

Esto funciona correctamente si $ 1 es un argumento vacío o no. Entonces, alguien recordó la notación incorrectamente, introduciendo accidentalmente un error.]


Para citar la parte relevante de man bash para la información a la que se refirió Jonathan Leffler en su comentario:

Cuando no se realiza la expansión de subcadenas, bash prueba para un parámetro que está desarmado o nulo ; omitir los dos puntos da como resultado una prueba solo para un parámetro que está desarmado .

(énfasis mío)





shell