2015-02-25 2 views
-1

Я пишу оболочку оболочки для программы. Обертка передаст в командной строке параметры командной строки. Также он будет поставлять (некоторые) варианты, если они не указаны.

Вопрос: как проверить, есть ли опция, например -j, (нет) в списке аргументов?

IF Баш, как питон, я могу сделать

if '-j' in [email protected]; then 
    my_prog "[email protected]" 
else 
    my_prog "[email protected]" -j 10 
fi 

очевидное это не так.

Как мне сделать это в bash, безопасно и элегантно?

Спасибо!

+0

Вы можете взглянуть на этот вопрос и ответить на него: http://stackoverflow.com/questions/28664721/bash-check-if-argument-is-given-eg-is-there-the-argument-a –

ответ

1

Простой ляп является:

#!/bin/bash 
if [[ " $* " == *" -j "* ]] 
then 
    echo "It contains -j" 
fi 

Он объединяет все аргументы в строку, а затем проверяет, если он содержит «-j».

Вы также можете иметь более надежную версию с немного больше работы:

inarray() { 
    local element="$1" 
    local f 
    shift 
    for f 
    do 
    [[ "$f" == "$element" ]] && return 0 
    done 
    return 1 
} 

if inarray "-j" "[email protected]" 
then 
    echo "It contains -j" 
fi 
1

Другой способ, похожий на решение этого другого парня, а также принимая во внимание, что там может быть больше, чем один вариант в арг, например, -hijk, то -j не будет существовать, но J до сих пор используется:

#!/bin/bash 

if $* | grep -o "j" 
then 
    joption=true 
else 
    joption=false 
fi 

Baring в виду, что это решение требует, чтобы ни один другой аргумент не имеет букву «J» в этом ... :-)

Смежные вопросы