2015-03-05 3 views
-1

Я хочу, чтобы проверить, если $1 имеет какой-либо из следующих специальных символов @#$%&*-=+

Пользователь будет запускать скрипт так:

[email protected]:~> scriptname [email protected]$m 

скрипт должен обнаружить, если [email protected]$m имеет какой-либо специальный символ! Благодаря

+2

Вы попробовали что-нибудь? –

+0

Почему вы пытаетесь это проверить? Что вас беспокоит? –

+0

@ EtanReisner пахнет проблемой X-Y. Я тоже. – kojiro

ответ

0

Если вы ищете только наличие специальных символов, которые можно использовать

if egrep -q "[@#$%&*-=+]" <<< "$1" 
then 
    echo "Special Characters" 
fi 

Имейте в виду, хотя в вашем примере, что передача в [email protected]$m попытается найти переменную с именем m, если вы не пройти аргумент в одинарных кавычках.

+0

Спасибо за ответ, но я пробовал этот метод, и он не работал. даже с одинарными кавычками. Я также попытался вывести из grep в регулярном выражении и сравнить его с аргументом $ 1, но это тоже не сработало! Спасибо –

+1

Выражение интерпретируется как набор символов _range_ из-за тире. – kojiro

3

В общем случае, чтобы определить, содержит ли переменная элемент набора символов, вы можете использовать Pattern Matching с набором символов, как описано в руководстве bash.

[[ $var = *[set]* ]] 

В вашем случае сложная композиция сложна. Он содержит «&» и «-», которые имеют особое значение. Черта идет первым, или оболочка рассматривает набор символов диапазон. Амперсанд просто должен сбежать. Итак, вы должны сделать

[[ $var = *[[email protected]#$%'&'*=+]* ]] 
Смежные вопросы