Я хочу проверить, содержит ли моя строка одну или несколько звездочек.

Я пробовал это:

if [[ $date_alarm =~ .*\*.* ]]
then
    ...
fi

Он работал, когда я запускал сценарий напрямую, но не, если этот сценарий вызывается во время выключения (сценарий установлен на уровне выполнения 0 и 6 через update-rc.d)

Есть идеи, предложения?

Благодарность

10
voidAndAny 28 Июл 2009 в 16:04

7 ответов

Лучший ответ

Всегда заключайте строки в кавычки.

Чтобы проверить, содержит ли строка $ date_alarm звездочку, вы можете:

if echo x"$date_alarm" | grep '*' > /dev/null; then
    ...
fi 
6
William Pursell 28 Июл 2009 в 12:09
expr "$date_alarm" : ".*\*.*"
2
BreizhGatch 28 Окт 2010 в 14:37

Что произойдет, если вы замените

if [[ $date_alarm =~ .*\*.* ]]

С участием

if [[ "$date_alarm" =~ .*\*.* ]]

Вы также можете попробовать:

if [[ "$date_alarm" =~ '\*+' ]]

Не уверен насчет этого ...

С уважением

1
Atmocreations 28 Июл 2009 в 12:12
case "$date_alarm" in
*\**)
  ...
  break
  ;;
*)
  # else part
  ...
  ;;
esac

Синтаксис, в общем, / bin / sh, но он работает.

1
reinierpost 28 Июл 2009 в 12:24
if echo $date_alarm|perl -e '$_=<>;exit(!/\*/)'
then
    ...
fi
0
chaos 28 Июл 2009 в 12:17

В заключение

if echo x"$date_alarm" | grep '*' > /dev/null; then

Сделал трюк

Strange thing = ~. *. не работает только в контексте инициализации при завершении работы, но отлично работает при запуске в контексте bash ....

0
voidAndAny 28 Июл 2009 в 12:39

Нет необходимости перенаправлять stdout, как это делают другие. Вместо этого используйте параметр -q команды grep:

If echo x "$ date_alarm" | grep -q '*'; потом

0
zigo 10 Ноя 2017 в 20:50