
Как очень запутавшийся новичок, что случилось сЕСЛИзаявление и[ ], [[ ]], ( ), (( ))
почему
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 такого правила не существует, вы можете использовать любую комбинацию этих методов на любом уровне вложенности.