[

[

Как очень запутавшийся новичок, что случилось сЕСЛИзаявление и[ ], [[ ]], ( ), (( ))

почему

if [ $jengnr -eq 1 ]; then

верно, но здесь это двойное:

if [[ -f "$jdir$object.eng.dat" ]]; then

а затем я прочитал, что вложенный if внутри if должен быть (( )) (не мой код)

#!/bin/bash
# Nested if statements
if [ $1 -gt 100 ]
then
echo Hey that\'s a large number.
if (( $1 % 2 == 0 ))
then
echo And is also an even number.
fi
fi

но я использовал [[ ]] в операторе if, который находился внутри оператора if [[ ]], и это сработало?

Может ли кто-нибудь объяснить, что, кто и почему существуют 4 разных if?

.. и когда их правильно использовать?

решение1

[

Это команда тестирования оболочки (иногда также встроенная) и переносимый метод выполнения тестов оболочки.

[[

Его часто называют «расширенным тестом», он поддерживается в основном только ksh и bash и предоставляет больше возможностей, чем тест оболочки, но не такой переносимый.

(

Это вообще не тестовая команда, одинарная скобка создаст подоболочку. Операторы if просто оценивают код возврата из следующей за ними команды, поэтому использование if ( command ); thenбудет работать, но это будет просто оценка возврата подоболочки.

((

Это позволяет использовать арифметику оболочки, которую можно использовать при ifтестировании условий, связанных с арифметикой.


Кроме того, обратите внимание, что для вложенных операторов if такого правила не существует, вы можете использовать любую комбинацию этих методов на любом уровне вложенности.

Связанный контент