Подобные тестовые выражения с использованием оператора или?

Как насчет:

cd /sourcemp4folder
for i in *.mp4
 do
 a=$(find /destination/ -iname "$i" -print | wc -l)
 if [[ $a > 0 ]]; then echo "Skip "
 else echo "cp $i to /destination/"
 fi
 done
-121--79103-

Возникла проблема из-за небольшого количества пыли, которая оказалась на соединениях порта HDMI. Это дало небольшую проблему полярности, которая вызывает спонтанное срабатывание прерываний.

Следовательно, соединение HDMI было потеряно, затем возвращено, затем снова потеряно и т.д.

Следовательно, сообщения EDID.

Следовательно, переполнение KWorkers.

-121--243366-

Подключение общего сетевого ресурса через соединение WiFi не является оптимальным решением, учитывая сам характер соединения.

Проблема может быть связана с тем, что Wi-Fi не стабилен.

Можно попытаться подключить общий ресурс NFS с параметрами

rsize=32768,wsize=32768 

и/или использовать TCP вместо UDP. Последнее решение может быть более дорогостоящим с точки зрения производительности, однако оно должно обеспечить лучшую стабильность соединения.

1
17.06.2018, 02:06
2 ответа

No son lo mismo. De hecho [ "$first_arg" == "major" || "$first_arg" == "minor" ]ni siquiera es una expresión válida.

Esto se debe a que [es un comando equivalente a testy no pueden usar la alternativa ||, que opera en el nivel de comando inter -. Lo que históricamente podría considerarse correcto para la alternativa es -o, pero ahora está marcado como obsoleto por POSIX1 , que aconseja reescribir

test "$1" -o "$2"

en

test "$1" || test "$2"

Además de las construcciones testy [, también existe el comando de prueba "moderno" [[, que a su vez no acepta -opor completo, sino que acepta ||.

Por lo tanto, todos estos son válidos y equivalentes:

  1. Una [[prueba:

    if [[ $first_arg == major || $first_arg == minor ]]; then
        exit 1;
    fi
    
  2. Dos [[pruebas:

    if [[ $first_arg == major ]] || [[ $first_arg == minor ]]; then
        exit 1;
    fi
    
  3. Dos [pruebas (el equivalente estándar):

    if [ "$first_arg" = major ] || [ "$first_arg" = minor ]; then
        exit 1;
    fi
    

Las comillas dobles alrededor de $first_argno son necesarias dentro de [[, ya que no hay división de palabras ni expansión de nombre de ruta allí. Sin embargo, las comillas deben usarse con [. Y tampoco tiene sentido citar minorni major. No solo aquí, sino también con testo [. Eso es porque son cadenas simples.

1. Ver USO DE LA APLICACIÓN.

5
27.01.2020, 23:14

Dado que sus dos expresiones no son válidas, hay una cuasi equivalencia;-)

Tenga en cuenta que ==solo es válido con el operador no -estándar [[.

En general, :cuando se usa la función interna test, se recomienda usar solo expresiones simples, ya que las expresiones más grandes podrían generar resultados impredecibles en caso de que se aplique la expansión de parámetros.

Dado que el testestá integrado en la carcasa desde aprox. 35 años, llamar a comandos testmás simples y combinarlos a nivel de shell ya no es un problema de rendimiento.

1
27.01.2020, 23:14

Теги

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