Ожидается двоичный оператор - вопрос цитирования для аргументов сценария оболочки

Эта философия небезопасна по умолчанию.

Возможны две разумные и очевидные стратегии: немедленная запись на диск или отложенная запись. UNIX исторически выбрал последнее. Так что будьте осторожны, после этого вам нужно позвонить fsync .

Однако вы можете заранее указать безопасность, установив устройство с опцией sync , или для каждого файла, открыв их с помощью O_SYNC .

Помните, что UNIX был разработан для компьютерных экспертов. «Безопасный по умолчанию» не рассматривался. Безопасность означает более медленный ввод-вывод, а в тех ранних системах действительно был медленный ввод-вывод, что делало цену выше. К сожалению, ни UNIX, ни Linux не перешли на режим safe-be-default, хотя это не критическое изменение.

2
08.02.2018, 17:52
1 ответ

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.

8
27.01.2020, 21:52

Теги

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