CURL - 字符串文字中的无效字符 '\\n'

CURL - invalid character '\\n' in string literal

所以我正在编写一个简单的 bash 脚本,它接受纯文本消息,将其转换为十六进制,然后 curl 调用本地主机上 运行 的 geth 客户端来签署数据.我能够将明文消息转换为十六进制,但是当将转换后的十六进制变量作为输入发送到我的 CURL 命令时,它给了我 -

jsonrpc":"2.0","error":{"code":-32600,"message":"invalid character '\n' in string literal"}}

代码如下 -

#!/bin/bash

# grabbing day and month from current date
D=$(date)
DAY=$(date -d "$D" '+%d')
MONTH=$(date -d "$D" '+%m')
YEAR=$(date -d "$D" '+%Y')


echo "Day: $DAY"
echo "Month: $MONTH"
echo "Year: $YEAR"

# prepare todays JSON message for attestation

a="SH_$YEAR$MONTH$DAY"
b="_324019325_1_10_001_00_test"
filename=$a$b
hash="test hash"
addl_data="test data"
tag="test tag"

msg=$filename$tag$addl_data$hash
echo "Prepared Message is - $msg"


msg_hex_wn=$(xxd  -ps <<< "$msg")| tr -d '0125'
echo "Message in hex - $msg_hex_wn"
echo "\n"
echo $(xxd  -ps <<< "$msg")| tr -d '0125'


# Signing the message in hex
curl -X POST localhost:8545  -d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_sign\",\"params\":[\"0x525c846b777d003048dbabd0f2dd677086839812\", \"$(xxd  -ps <<< "$msg")| tr -d '0125'\"],\"id\":5}" 





read

显然 $(xxd -ps <<< "$msg") 部分应该归咎于此,它可能有 \n 并且解析器正在将其读取为 \n,当我尝试使用0x1234 而不是 $(xxd -ps <<< "$msg") 我能够得到响应,所以我在这里看到的是有一种方法可以从 $ 中清除换行符和空格的十六进制(xxd -ps <<< "$msg") 命令?还是有更好的方法将字符串转换为十六进制?

您的具体问题是您将管道置于 tr 命令替换之外。 | tr yada yada 需要放在 $(xxd ...) 右括号内。

final 值捕获到变量中并将其插入到 curl 命令行中可能会大大简化故障排除。

就其他方法而言,我可能会使用简单的单行

perl -pe 's/(.)/ sprintf("%02X", ord()) //ge' <<<"$msg"