Я предлагаю для этого использовать команду gunzip
gunzip /path/to/file/filename.z
, это также будет выводить без вывода сообщений
Эти операторы используются, например, в ((...))
и $ ((...) )
( арифметическое вычисление и арифметическое расширение соответственно):
if (( arg1 >= num1 )) && (( arg2 <= num2 )); then
...
fi
А также с let
. Следующее эквивалентно описанному выше:
if let "arg1 >= num1" && let "arg2 <= num2"; then
...
fi
См. Раздел «АРИФМЕТИЧЕСКАЯ ОЦЕНКА» в руководстве по Bash.
В bash
в частности:
((arg1 >= num1))
(унаследовано от ksh
) выполняет арифметическое сравнение. arg1
и num1
здесь относятся к одноименным переменным оболочки. Каждая переменная интерпретируется как арифметическое расширение, и результат подставляется. Здесь, если $arg1
равно 010
и $num1
равно 4+5
, результатом будет false ( команда ((...))
вернется с ненулевым статусом выхода), потому что 010
является восьмеричным для 8, а 4+5
равно 9 , (($arg1 >= $num1))
: то же, что и выше, за исключением того, что $arg1
и $num1
расширяются перед вычислением всего арифметического выражения. Если бы $arg1
было (2
и $num1
было 2)
, предыдущая команда завершилась бы ошибкой, потому что (2
и 2)
не являются допустимыми выражениями сами по себе. Но здесь это удалось бы, потому что (2 >= 2)
будет вычисляемым арифметическим выражением. Как правило, в арифметических выражениях лучше не использовать $
. Сравните, например, a=2+2; echo "$((3 * $a))"
с a=2+2; echo "$((3 * a))"
. пусть "..."
(тоже от кш). То же, что и ((...))
, за исключением того, что она анализируется как обычная команда, менее разборчива, так же мало переносима, и вам нужно уделять больше внимания цитированию.["$arg1" -ge "$num1"]
. Это стандартно и портативно. Поддерживаются только десятичные константы. [010 -ge 9 ]
совпадает с [10 -ge 9 ]
. [[ $arg1 -ge $num1 ]]
. Тоже от кш, но с большими отличиями. На этот раз $arg1
и $num1
рассматриваются как арифметические выражения, а не просто десятичные константы. [[ 010 -ge 9 ]]
снова возвращает false. [[ $arg1 < $num1 ]]
. Сравнение строк. Это использует strcoll()
для сравнения строк, поэтому используется алгоритм сортировки в локали. Обратите внимание, что хотя <
и >
используют алгоритм сортировки, =
/==
выполняют побайтовое сравнение, поэтому могут быть парами строк, для которых все <
, >
и =
/==
возвращают false. <=
и >=
не поддерживаются. ["$arg1" "<" "$num1" ]
. Нестандартный. То же, что и выше, но с помощью команды [
. <
нужно заключать в кавычки, чтобы он не воспринимался как оператор перенаправления. expr " $arg1" "<=" " $num1" > /dev/null
(обратите внимание на встроенные пробелы, чтобы вызвать лексическое сравнение и избежать проблем со строками, похожими на операторы expr
) или awk 'BEGIN{exit(!(""ARGV[1] <= ""ARGV[2]))}' "$arg1" "$num1"
— это стандартные команды для сравнения строк с использованием strcoll()
.