В чем разница между операторами Bash [[ vs [ vs (Vs ((
Bash предоставляет несколько операторов для сравнения значений, тестовых условий и выполнения математических операций. Эти операторы включают [[, [, ( и (() и часто могут сбивать с толку новых пользователей. Вот обзор различных операторов и их функций.
Двойные квадратные скобки [[ ]]
[[ и ]] используются для условных выражений в Bash. [[ — это расширенная версия одинарных квадратных скобок [] и используется для сопоставления с образцом, регулярных выражений и расширенных условных выражений. Оператор [[ более мощный, чем [, и во многих случаях предпочтительнее.
string=Linux
if [[ $string == "Linux" ]]; then
echo "The string is Linux"
fi
В следующем коде оператор двойных квадратных скобок используется для проверки того, равно ли значение переменной $string строке «linux»:
Одинарные квадратные скобки [ ]
[ и ] используются для условных выражений в Bash. Ее также называют командой «тест». Оператор одиночных квадратных скобок [ также используется для условных выражений, но имеет больше ограничений, чем [[. Это полезно для базовых сравнений и тестов, таких как проверка существования файла или пустой строки.
# Define the name of the file to check
file="/home/aaliyan/Documents/bashfile2.sh"
# Check if the file exists
if [ -f $file ]; then
echo "The file exists"
else
echo "The file does not exist"
fi
Этот скрипт проверяет, существует ли файл с именем «bashfile2.sh» в соответствующем каталоге, и если файл существует, он выводит на консоль сообщение «Файл существует», иначе он выводит «Файл не существует»:
Скобки ( )
Оператор скобок ( используется для запуска команд в среде подоболочки. Это означает, что любые изменения, внесенные в среду в скобках, не влияют на среду родительской оболочки.
# Change directory to /home/user/directory and list its contents
(cd /home/aaliyan/Documents && ls)
В следующем коде оператор скобок используется для изменения каталога на /home/aaliyan/Documents и запуска команды ls в подоболочке:
Двойные скобки (( ))
(( и )) используются для арифметической оценки и поддерживают более продвинутые функции, чем оператор с одинарными скобками (, такие как побитовые операции, ниже приведен пример сценария bash, демонстрирующий использование двойных скобок:
# Define the values of a, b, and c
a=7
b=9
c=2
# Check if the sum of a and b is greater than c
if (( $a + $b > $c )); then
echo "The sum of a and b is greater than c"
fi
В следующем коде оператор двойных скобок используется для проверки того, больше ли сумма переменных $a и $b значения переменной $c:
Чтобы лучше понять различия между этими операторами, я дал таблицу, которая может помочь вам написать более эффективный код bash и более эффективно использовать эти операторы bash:
Operator | Purpose | Example |
[[ expression ]] | Conditional expressions | if [[ $string == “linux” ]]; then echo “The string is linux” |
[ expression ] | Basic Conditional expressions | if [ -f $file ]; then echo “The file exists” |
( command ) | Run commands in a subshell environment | (cd /home/user/directory && ls) |
(( expression )) | Arithmetic operations | if (( $a + $b > $c )); then echo “The sum of a and b is greater than c” |
Заключение
Операторы Bash [[ ]], [ ], ( ) и (( )) имеют различное использование и синтаксис. Оператор двойных квадратных скобок [[ ]] используется для сопоставления с образцом и сравнения строк, а оператор одинарных квадратных скобок [ ] используется для условных операторов и проверки файлов. Оператор круглых скобок ( ) используется для группировки команд, а оператор двойных круглых скобок (()) используется для арифметического вычисления. Важно использовать соответствующий оператор для поставленной задачи, чтобы ваши сценарии Bash были точными и эффективными.