This question already has answers here:
How do I set a variable to the output of a command in Bash?
(14个答案)
22天前关门。
我有以下场景
STEP1
 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] ----> ")

上一行将变成下一行
RIU-1--->AB019030015--->223a:c03a:261:1141:0:50:c389:22ff
步骤3(循环RIU阵列)
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

上面一行总是错误的,下面一行是打印出来的
####不同的
我希望是一样的。
这是因为分号或CLI控制台的greped字符编码问题吗?

最佳答案

很可能,'sshpass | ssh-tt'将导致以'\r\n'结尾的行。
考虑到两个选项-使用“tr”进行过滤将(几乎)始终有效。但是'-tt'看起来更干净。
'-tt'导致终端分配,它正在注入'\r'。如果可能的话,试着不用它跑步。
如果这不是一个选项,则将输出管道设置为“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/

10-13 06:40