【问题标题】:Check if a string contains Asterisk (*)检查字符串是否包含星号 (*)
【发布时间】:2010-11-14 16:27:44
【问题描述】:

我想检查我的字符串是否包含一个或多个星号。

我试过了:

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

当我直接启动脚本时它可以工作,但如果在关机期间调用此脚本(通过 update-rc.d 安装在运行级别 0 和 6 中的脚本)则不会

有什么想法、建议吗?

谢谢

【问题讨论】:

  • 我猜你的初始化系统不使用/bin/bash作为解释器,而是使用/bin/sh
  • 如果威廉的回答有效,别忘了点击“接受回答”按钮!

标签: linux string bash init


【解决方案1】:

总是引用字符串。

要检查字符串 $date_alarm 是否包含星号,您可以这样做:

如果回显 x"$date_alarm" | grep '*' > /dev/null;然后 ... 菲

【讨论】:

    【解决方案2】:

    如果你替换会发生什么

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

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

    你也可以试试:

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

    不确定那个...

    问候

    【讨论】:

    • if [[ "$date_alarm" =~ .**.* ]] 不起作用,但正如我所说,奇怪的是它仅在关机期间的 init 上下文中不起作用,如果[[ "$date_alarm" =~ '*+' ]] 未测试 Tahnks
    • 引用模式:if [[ "$date_alarm" =~ ".**.*" ]]
    【解决方案3】:
    if echo $date_alarm|perl -e '$_=<>;exit(!/\*/)'
    then
        ...
    fi
    

    【讨论】:

      【解决方案4】:
      case "$date_alarm" in
      *\**)
        ...
        break
        ;;
      *)
        # else part
        ...
        ;;
      esac
      

      语法是,好吧,/bin/sh,但它有效。

      【讨论】:

        【解决方案5】:

        终于

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

        成功了

        奇怪的事情 =~ .*. 在关机期间不仅在 init 上下文中工作,但如果在 bash 上下文中启动则完美......

        【讨论】:

        • 无需调用外部程序如 grep 来做你想做的事。在 bash 中,case 语句就足够了。
        【解决方案6】:
        expr "$date_alarm" : ".*\*.*"
        

        【讨论】:

        • 稍微解释一下就好了;)
        【解决方案7】:

        无需像其他人那样重定向标准输出。改用 grep 的 -q 选项:

        如果回显 x"$date_alarm" | grep -q '*' ;那么

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-15
          • 1970-01-01
          • 2017-04-27
          • 1970-01-01
          • 2016-02-03
          • 1970-01-01
          • 1970-01-01
          • 2019-06-06
          相关资源
          最近更新 更多