【问题标题】:command in bash script fails to use variable inputbash 脚本中的命令无法使用变量输入
【发布时间】:2020-06-25 21:44:55
【问题描述】:

这是我的脚本:

#!/bin/bash

opid=$(./komodo-cli -ac_name=EXAMPLECOIN z_sendmany $fromAddress '[{"address":"'''$toAddress'''","amount":'''$sendAmount'''}]' 1 0)

echo $opid

txid=$(./komodo-cli -ac_name=EXAMPLECOIN z_getoperationstatus '["'$opid'"]' | jq -r '.[]' | jq -r '.result' | jq -r '.txid')

echo $txid

bash 脚本的预期目标是运行命令以发送交易,获取交易的操作 ID 并在命令中使用它来获取交易 ID。

就像现在一样,z_operationstatus 命令无法使用 opid 变量并返回空结果。

opid 将成功发送交易。

echo $opid 正确输出 opid。例如:opid-7a08d8e0-63ed-44b4-9c8a-79c90b8c460c

如果我自己运行txid并将z_getoperationstatus '["'$opid'"]'替换为z_getoperationstatus '["'$1'"]'并在运行时提供一个opid,它将成功打印正确的txid。

z_getoperationstatus 的正确语法是 z_getoperationstatus '["opid..."]' but I added single quotes around$opid`,因此变量在已经存在的单引号内被识别。 (不确定这是否正确或说明问题)

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 第一个字符# 后面缺少一个感叹号。只是说。
  • 如果你有jq,你为什么要通过连接变量来创建JSON?
  • @Roadowl 谢谢,但不是脚本中的问题。把它放在这里了。
  • @Barmar 我只是在使用 jq,我知道如何仅获得命令输出的所需结果。 z_operationstatus 返回大量数据,但我只需要 txid 作为输出和其他命令。我意识到这可能不合适

标签: bash variables transactions null


【解决方案1】:

$opid 的末尾可能有 CR 字符,请尝试删除它。

opid=$(./komodo-cli -ac_name=EXAMPLECOIN z_sendmany $fromAddress '[{"address":"'''$toAddress'''","amount":'''$sendAmount'''}]' 1 0 | tr -d '\r')

【讨论】:

  • 我试过了,但没有运气。 echo 仍然显示来自交易的正确 opid 和来自 z_getoperationstatus 的 null
  • 你应该使用echo "|$opid|" 这样的东西,这样你就可以看到它周围是否有空格。
  • 也可以试试echo "$opid" | od -c 看看是否还有其他非打印字符。
  • 这是echo "|$opid|" 的输出:|opid-a9cf03d2-d65e-4537-8185-8d65fe809564| null
  • 这是echo "$opid" | od -c 的输出:0000000 o p i d - c 4 5 c 1 8 e 8 - 6 9 0000020 1 a - 4 6 f 5 - b 1 0 e - 6 c e 0000040 6 b 6 1 a e 4 2 e \n 0000052 null
猜你喜欢
  • 1970-01-01
  • 2021-03-23
  • 2012-04-03
  • 2010-10-22
  • 2015-04-24
  • 2016-12-27
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
相关资源
最近更新 更多