Как работает эта команда `cat` для текстового файла сценария?

Sí, ese es un problema de citas:[ ! $3 ]se expande a[ ! south brisbane qld ](cuatro argumentos entre [y]). Y cuando ve cuatro argumentos, siendo el primero un !, [espera ver algo como [ ! arg1 op arg2 ]donde opes un operador binario. (esto, de nuevo, es una de las cosas diferentes entre [.. ]y [[.. ]]; ver esta Q y también esta Q)

brisbaneno es un operador válido, por lo que se queja y devuelve 2, que es falso, por lo que las declaraciones dentro de ifno se ejecutan. Para saber la diferencia entre un error y una prueba fallida regular, necesitaría probar explícitamente el valor devuelto contra 2.

Por otro lado, si $3está vacío, entonces la prueba se convierte en [ ! ],una prueba de un -argumento que verifica si el único argumento no está vacío (es la cadena de un -carácter!). En ese caso, funciona según lo previsto, aunque tal vez no por el motivo esperado.


Desea que [ ! "$3" ]o [ -z "$3" ]mantengan la cadena como un argumento para [.

Por supuesto, también podría invertir el sentido de la prueba y hacer el trabajo real dentro del if, de modo que un error en la prueba evitaría ejecutar los comandos principales. Pero eso haría que la estructura del código fuera un poco menos clara.

-5
20.10.2017, 16:45
0 ответов

Теги

Похожие вопросы