2 одинаковые строки не равны в bash - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь проверить, равен ли вывод программы чему-либо, чтобы я мог что-то сделать на его основе.Консоль печатает, что 2 значения равны, но условие не выполняется.

Вот код:

#!/bin/bash

test_id=`clasp run testRunner`

function get_logs() {
  echo "trying to get logs for test id $test_id..."

  logs=`clasp logs`

  if logs_contain_test_id
  then
    print_logs
  else
    get_logs
  fi
}

function logs_contain_test_id() {
  IFS=$' '
  for log in $logs
  do
    echo $log
    echo $test_id
    if [[ "$log" == "$test_id" ]]
    then
      return 0
    fi
  done
  return 1
}

get_logs

Обратите внимание, что эта строка echo "trying to get logs for test id $test_id..." печатает идентификатор только как "03443db8..." а не полное предложение.

Также echo $log и echo $test_id log 03443db8 03443db8 в 2 отдельных строках, поэтому они должны быть равны.

Как я могу отладить это?Похоже, некоторые скрытые символы являются частью $test_id

Условие print_logs никогда не активируется, даже если оба возвращают print, равную консоли.Я на Mac, если это имеет какое-либо значение.

Вот странный вывод, который я получаю:

tests,
03443db8
0
03443db8
failures,
03443db8
03443db8
03443db8
03443db8... <-- this should be "trying to get logs for test id 03443db8..."

edit: после добавления set -x я получаю эти журналы:

+ [[ failures, == \[\2\K\[\1\G\4\4\f\a\7\0\c\7 ]]
+ for log in '$logs'
+ echo 44fa70c7
44fa70c7
44fa70c7'
44fa70c7
+ [[ 44fa70c7 == \[\2\K\[\1\G\4\4\f\a\7\0\c\7 ]]
+ return 1
+ get_logs
44fa70c7...'
44fa70c7...
++ clasp logs

1 Ответ

0 голосов
/ 29 мая 2019

Добавьте set -x к вашему сценарию, чтобы вы могли отследить его. См. Руководство по Bash: The Set Builtin для получения более подробной информации. В вашем случае скрипт будет:

#!/bin/bash
set -x
test_id=`clasp run testRunner`

function get_logs() {
  set -x
  echo "trying to get logs for test id $test_id..."

  logs=`clasp logs`

  if logs_contain_test_id
  then
    print_logs
  else
    get_logs
  fi
}

function logs_contain_test_id() {
  set -x
  IFS=$' '
  for log in $logs
  do
    echo $log
    echo $test_id
    if [[ "$log" == "$test_id" ]]
    then
      return 0
    fi
  done
  return 1
}

get_logs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...