2016-10-14 14 views
-1

Я ищу способ сократить этот кусок кода, чтобы удалить эхо $? часть.Существует ли сокращение в bash для расширения кода выхода?

case 0 in 
    $([[ -e /path/to/file/a ]]; echo $?)) echo a ;; 
    $([[ -e /path/to/file/b ]]; echo $?)) echo b ;; 
esac 

Он чувствует, как Баш должен иметь возможность расширения до значения выхода команд без необходимости иметь дополнительное заявление эха включено.

Я потратил 30 минут на расширение команды Google, но я не нашел ничего, что могло бы исключить эхо из приведенного выше примера.

Возможно, это просто принятие желаемого за действительное, но в любом случае я хотел бы получить определенный ответ и услышать любые комментарии.

ответ

3

Может быть, я что-то не хватает, но не что-то вроде

if [ -e /path/to/file/a ]; then 
    echo a 
elif [ -e /path/to/file/b]; then 
    echo b 
fi 

или

for f in a b; do 
    if [ -e /path/to/file/"$f" ]; then 
    echo $f 
    break 
    fi 
done 

быть более простой подход?

Если вам нужно обрабатывать растущий список мест, я определенно предпочитаю второй подход, поскольку он позволяет определить список в начале сценария, а не где-то глубже в вашем коде:

locations=('/path/to/file/a' '/path/to/file/b') 

или

declare -a locations=() 
locations+=('/path/to/file/a') 
locations+=('/path/to/file/b') 

Вы можете обрабатывать различные места по-разному, вкладывая в case заявление внутри if заявления, так что оно применяется только если место действительно существует:

for f in "${locations[@]}"; do 
    if [ -e "$f" ]; then 
    case "$f" in 
     '/path/to/file/b') 
     su -c "..." - someuser 
     ;; 
     *) 
     echo "$f" 
     ;; 
    esac 
    break 
    fi 
done 
+0

Я в настоящее время есть скрипт, который на основе вокруг, если Элиф заявления, которые быстро растут, как у меня было много много возможных местоположений файлов, – Phillmac

+0

Так что я хотел бы видеть, если это было возможно упростить структуру с футляром заявлениями также эхо a или echo b не всегда одна и та же команда, иногда есть команда su для выполнения как другой пользователь в зависимости от того, какой файл существует – Phillmac