visual studio microsoft español descargar community bash if-statement square-bracket

bash - microsoft - visual studio community



¿Cuándo se requieren corchetes en una declaración Bash if? (3)

Por lo general, uso corchetes en la declaración if:

if [ "$name" = ''Bob'' ]; then ...

Pero, cuando compruebo si grep tuvo éxito, no uso los corchetes:

if grep -q "$text" $file ; then ...

¿Cuándo son necesarios los corchetes en la declaración if ?


La mejor manera de pensar en la [ ... ] sintaxis es considerar [ ser un programa, ¡y lo es!

Mira esto:

~ $ ls /usr/bin//[ /usr/bin/[

por otro lado, probablemente no estés usando esa versión, ya que bash también proporciona [ como un shell incorporado.

De todos modos, para responder a su pregunta: ¿Qué pasa if ejecuta el comando que le da y ver que el valor de retorno es 0 o no? Usas [ para hacer otras comparaciones más interesantes, como las comparaciones de cadenas. Ver man [ y man bash .


Los corchetes son un sinónimo para el comando de test . Una instrucción if verifica el estado de salida de un comando para decidir qué rama tomar. grep -q "$text" es un comando, pero "$name" = ''Bob'' no es, es solo una expresión. test es un comando que toma una expresión y la evalúa:

if test "$name" = ''Bob''; then ...

Como los corchetes son sinónimo del comando de test , puede reescribirlo como su enunciado original:

if [ "$name" = ''Bob'' ]; then ...


[ es en realidad un comando, equivalente (casi, ver más abajo) al comando de test . No es parte de la sintaxis del shell. (Tanto [ como la test , dependiendo del shell, a menudo también son comandos incorporados, pero eso no afecta su comportamiento, excepto tal vez por el rendimiento).

Una instrucción if ejecuta un comando y ejecuta la parte then si el comando tiene éxito, o la parte else (si corresponde) si falla. (Un comando tiene éxito si sale con un estado ( $? ) De 0; falla si sale con un estado distinto de cero).

En

if [ "$name" = ''Bob'' ]; then ...

el comando es

[ "$name" = ''Bob'' ]

(Podría ejecutar ese mismo comando directamente, sin el if ).

En

if grep -q "$text" $file ; then ...

el comando es

grep -q "$text" $file

man [ u man test para más información.

NOTA AL PIE: Bueno, el [ comando es casi equivalente al comando de test . La diferencia es que [ requiere ] como último argumento, y la test no lo hace, y de hecho no lo permite. (No tenía que implementarse de esa manera, pero un [ sin un emparejamiento ] habría puesto a mucha gente muy nerviosa.)