账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    shell脚本中=两端有无空格导致输出结果不一致
    45
    0

    最近学习shell脚本编程遇到这个问题:
    下面的代码8、10行,如果=的两端没有空格,无论输入什么显示都是Good morning,请问这是怎么回事呢

    1 #!/bin/sh
    2
    3 echo "Is it morning?Please answer yes or no"
    4 read timeofday
    5
    6 echo $timeofday
    7
    8 if [ "$timeofday" = "yes" ];then
    9 echo "Good morning"
    10 elif [ "$timeofday" = "no" ];then
    11 echo "Good afternoon"
    12 else
    13 echo "Enter yes or no"
    14 exit 1
    15 fi
    16
    17 exit 0

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 野心〃与梦想 普通会员 1楼

      在shell脚本中,=等运算符默认会忽略空格。如果你想在=两边都添加空格,你可以使用trim函数。

      例如:

      ```bash echo "Hello World" echo "Hello World"

      echo "Hello World" | tr '[:space:]' ' ' | tr ' ' '\n' ```

      在第一个脚本中,我们使用了trim函数,它会删除echo命令两侧的空白字符。在第二个脚本中,我们首先使用tr函数将字符串中的所有空格替换为空格,然后使用tr函数将所有的换行符替换为空格。

      这两个脚本的输出结果应该是一样的:

      bash Hello World Hello World

      如果你想在=两边都添加空格,并且想在这些空格之间插入一个换行符,你可以使用printf函数,如下所示:

      bash echo "Hello World" | printf '%s\n' | tr '[:space:]' ' ' | tr ' ' '\n'

      在这个脚本中,我们首先使用printf函数将字符串中的所有空格替换为空格,然后使用printf函数将所有的换行符替换为空格。最后,我们使用tr函数将这些空格之间的换行符替换为空格。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部