Сравнение переменных в скрипте

Сравнение переменных в скрипте

У меня есть это выражение if [ ! - f "$i" -o "$i"x = "$MTR"x], и мне интересно, что оно делает. Я понимаю, что первая часть проверяет, iне является ли переменная файлом, но не могу понять, что такое вторая часть после -o(которая, как я думаю, обозначает логическое ИЛИ). Любая помощь будет очень полезна.

решение1

Правильно, -o обозначает логическое ИЛИ.
Сравнивает "$i"x = "$MTR"xсодержимое переменных с $iи $MTR.
Я думаю, что xдобавляется к обеим переменным, чтобы избежать проблем, если какая-либо из двух переменных не установлена ​​или не инициализирована.

решение2

Предполагая, что утверждение

if [ ! -f "$i" -o "$i"x = "$MTR"x ]

Проверяет , соответствует -f "$i"ли значение $iобычному файлу (или символической ссылке на обычный файл). Затем этот тест отрицается с помощью !. -oЭто устаревший и вышедший из употребления способ сказать «логическое ИЛИ».

Тесты "$i"x = "$MTR"x, выполненные несколько неуклюжим способом, который мог быть необходим в очень старых реализациях оболочки sh, проверяют, являются ли $iи $MTRодной и той же строкой.

В (текущей) стандартной shоболочке оператор будет записан следующим образом:

if [ ! -f "$i" ] || [ "$i" = "$MTR" ]

или, применив немного логики,

if [ "$i" = "$MTR" ] && [ -f "$i" ] || [ ! -f "$i" ]

Проще говоря: утверждение истинно, если $iявляется той же строкой, что $MTRи и ссылается на существующий обычный файл (или символическую ссылку на таковой), или если $iне является именем файла.

Возможно, будет интереснее рассмотреть, что означает это утверждение.ЛОЖЬ. Это всегда ложно только если $iи$MTR не являются одной и той же строкой.и $iссылается на существующий файл.

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