linux - echo、grep 和设置变量问题

标签 linux bash shell

<分区>

我有以下场景

第一步

 local output=$(sshpass -p ${PSSWD} ssh -tt -oStrictHostKeyChecking=no root@$IP "$(< vXU-script.sh)")

第 2 步

mapfile -t RIU_ARRAY < <(echo "$output" | grep "RIU-[1-4] ----> ")

上面一行会grep下面一行

RIU-1 ----> AB019030015 ----> 223a:c03a:261:1141:0:50:c389:22ff

第 3 步(循环 RIU_ARRAY)

ip=$(echo "${item}" | awk -F" " '{print $5}')

上面一行会得到IP部分223a:c03a:261:1141:0:50:c389:22ff

      if [ "${ip}" == "223a:c03a:261:1141:0:50:c389:22ff" ]; then
          echo "#### Same"
      else
        echo "#### Different"
      fi

上面一行总是 False 并打印下面一行 #### 不同

我希望它是一样的。 这是因为分号或 CLI 控制台 greped 字符编码问题吗?

最佳答案

最有可能的是,'sshpass | ssh -tt' 将生成以 '\r\n' 结尾的行。

考虑 2 个选项 - 使用“tr”过滤将(几乎)始终有效。但是“-tt”似乎更干净。

  1. '-tt' 导致终端分配,即注入(inject)'\r'。如果可能,请尝试在没有它的情况下运行。
  2. 如果这不是一个选项,将输出通过管道传输到“tr -d '\r'”
 local output=$(sshpass -p ${PSSWD} ssh -tt -oStrictHostKeyChecking=no root@$IP "$(< vXU-script.sh)" | tr -d '\r')

关于linux - echo、grep 和设置变量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58472779/

相关文章:

linux文件权限和不同的用户权限

bash - 转义参数中的冒号、等于、& 符号

git - 如何将 Bitbucket post-commit Hook shell 脚本正确转换为 Powershell 脚本?

shell - Oozie 电子邮件操作附件

linux - grep - 删除包含除指定字符以外的任何内容的行

c - `timer_settime()` 的奇怪行为

linux - 我如何像在 java 中一样迭代文件?

linux - 用于查找硬件信息的 Bash 脚本给出 "Memory Fault"

xml - 如何在 Bash 中解析 XML?

shell - 捕获shell输出时Chef编译错误