$? <variable>в ш - PullRequest
       22

$? <variable>в ш

1 голос
/ 04 ноября 2010


Недавно я наткнулся на код ниже ...

<code>
if [ ! $?target -o $target = "" ]; then
    echo "Target is not set"
fi

Мне интересно понять логику приведенного выше фрагмента кода.
Кажется, он проверяет, если я прав, установлен ли "$taget" или нет или "$target" пусто или нет.

Я пытаюсь найти, как работает $?variable, но не нашел относительных результатов поиска.

Поэтому, пожалуйста, помогите мне понять, как это работает. Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 04 ноября 2010

В некоторых оболочках, например, csh, $?xyz будет иметь значение 1, если установлено xyz, в противном случае оно будет равно 0.

Все, что делает фрагмент, проверяет, является ли либо $target не установлен вообще или если он установлен в пустую строку.В обоих случаях предполагается, что он не установлен.

Обратите внимание, что это отличается от bash, например, где $? - это код возврата из последней выполненной команды.В этой оболочке вы просто получите код возврата с последующим именем переменной, например 0target.

2 голосов
/ 04 ноября 2010

Я думаю, что ваш сценарий несколько неверно процитирован,

if [ ! "$?target" -o "$target" = "" ]; then
    echo "Target is not set"
fi

Это действительно выведет «Target not set», когда $ target не установлено, однако гораздо более надежный способ сделать это:-

if [ "x$foo" = "x" ]; then
    echo "foo is not set"
fi
0 голосов
/ 07 января 2011

Я поставил "#! Sh" в верхней части строки 1 и запустил его в Mac OS 10.5. Терминальное окно, в котором написано: bash ...

Оригинальный скрипт с [!"$? target" -o "$ target" = ""] 'получает try.sh: строка 3: [: слишком много аргументов

Версия, предлагаемая IanNorton, работает: цель не установлена ​​

Я получаю те же результаты с #! Bash в строке 1 и без спецификации оболочки в строке 1.

Ваш пробег может отличаться ...

...