Содержимое переменной, созданной в bash, содержит некоторые невидимые символы, и это не новая строка - PullRequest
0 голосов
/ 17 января 2019

Эти 2 переменные будут иметь одинаковое видимое содержимое

  x_sign1="aabbccdd_and_somthing_else"

  var1="...."
  [........]
  x_sign2=$(echo -n "${var1}${var2}${var3}" | shasum -a 256)
  echo $x_sign2

  ====> 
  aabbccdd_and_somthing_else -

Обратите внимание на «-» в конце.

Однако их длина будет отличаться. Даже если x_sign2 не содержит символ новой строки. Для этого:

  x_sign22=$(echo -n "${var1}${var2}${var3}" | shasum -a 256 | tr -d '\n')

Но:

  echo ${#x_sign1}
  ====> 64
  And:

И

  echo ${#x_sign2}

  ====> 67

  echo ${#x_sign22}

  ====> 67

Разница составляет 3 символа. Видимое содержимое идентично.

Кроме того, когда я делаю запрос через curl к REST API, которому требуется это значение подписи, x_sign1 всегда завершается успешно, тогда как x_sign2 - «неправильная подпись»

Почему? Как это исправить?

1 Ответ

0 голосов
/ 17 января 2019

Непечатаемых символов может быть много. Если вы хотите удалить любые «непечатные» символы, то скажите tr, что вы хотите удалить.

POSIX tr имеет ряд именованных классов символов. Для всех печатаемых символов используйте [:print:]. Чтобы удалить все НЕ в этом наборе, -d исключите опцию -c набора.

Итак, вместо

tr -d '\n'

использование

tr -dc '[:print:]'

ЕСЛИ ПРОБЛЕМА - это просто ' - ' в конце ...

x_sign22 = "$ {x_sign22% - *}"

например:.

$: x="aabbccdd_and_somthing_else - "
$: echo "[$x]"
[aabbccdd_and_somthing_else - ]
$: x="${x% -*}"
$: echo "[$x]"
[aabbccdd_and_somthing_else]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...