Bash, если с подоболочкой не работает, как ожидалось [дубликат]

Сначала установите путь с помощью этой команды:

set path="paste the set path address"

Затем вам нужно загрузить программу. Введите «cd (имя папки)» в сохраненный диск и скомпилируйте его. Например, если моя программа, хранящаяся на диске D, введите «D:», нажмите enter и введите «cd (имя папки)».

15
задан Patryk 10 July 2013 в 15:54
поделиться

2 ответа

Код возврата доступен в специальном параметре $? после выхода команды. Как правило, вам нужно использовать его только тогда, когда вы хотите сохранить его значение перед запуском другой команды:

valid_ip "$IP1"
status1=$?
valid_ip "$IP2"
if [ $status1 -eq 0 ] || [ $? -eq 0 ]; then

или если вам нужно различать различные ненулевые статусы:

valid_ip "$IP"
case $? in
    1) echo valid_IP failed because of foo ;;
    2) echo valid_IP failed because of bar ;;
    0) echo Success ;;
esac

В противном случае вы позволяете различным операторам проверять это неявно:

if valid_ip "$IP"; then
    echo "OK"
fi

valid_IP "$IP" && echo "OK"

Вот простой, идиоматический способ записи valid_ip:

valid_ip () {
    local ip=$1
    [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]] && {
        IFS='.' read a b c d <<< "$ip"
        (( a < 255 && b < 255 && c < 255 && d << 255 ))
    }
}

Есть два выражения: [[...]] и { ... }; к ним присоединяются &&. Если первый сбой, то valid_ip терпит неудачу. Если это произойдет, то выполняется второе выражение (составной оператор). read разбивает строку на четыре переменные, и каждый из них проверяется отдельно внутри арифметического выражения. Если все верно, то ((...)) преуспевает, что означает, что список && преуспевает, а это означает, что valid_ip преуспевает. Нет необходимости хранить или возвращать явные коды возврата.

13
ответ дан chepner 26 August 2018 в 14:57
поделиться

Нет необходимости в круглых скобках, если проверяется состояние выхода:

if valid_ip $IP ; then
    ...

Просто вызовите функцию так, как вы вызовете любую другую команду.

9
ответ дан choroba 26 August 2018 в 14:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: