为什么一些变量在BASH的开头不起作用
这是我的完整代码:为什么一些变量在BASH的开头不起作用,bash,loops,variables,echo,Bash,Loops,Variables,Echo,这是我的完整代码: #!/bin/bash wget -O /tmp/crex24.txt --no-check-certificate "https://api.crex24.com/CryptoExchangeService/BotPublic/ReturnTicker?request=[NamePairs=BTC_LTC,BTC_ETH,BTC_XMR]" echo "++++++++++++++++ CREX 24 ++++++++++++++++" number_of_pairs
#!/bin/bash
wget -O /tmp/crex24.txt --no-check-certificate "https://api.crex24.com/CryptoExchangeService/BotPublic/ReturnTicker?request=[NamePairs=BTC_LTC,BTC_ETH,BTC_XMR]"
echo "++++++++++++++++ CREX 24 ++++++++++++++++"
number_of_pairs=`cat /tmp/crex24.txt | grep PairId | wc -l`
count=1
while [ $count -le $number_of_pairs ]
do
pairname=`cat /tmp/crex24.txt | grep -e "PairName" | sed -n "${count}p" | cut -d: -f2 | tr -d '", ' | cut -c1-10`
highprice=`cat /tmp/crex24.txt | grep -e "HighPrice" | sed -n "${count}p" | cut -d: -f2 | tr -d '", ' | cut -c1-10`
lowprice=`cat /tmp/crex24.txt | grep -e "LowPrice" | sed -n "${count}p" | cut -d: -f2 | tr -d '", ' | cut -c1-10`
echo "$highprice $lowprice $pairname"
echo "$pairname $highprice $lowprice"
let "count++"
done
输出:
++++++++++++++++ CREX 24 ++++++++++++++++
0.01663970 0.01574956 BTC_LTC
0.01663970 0.01574956
0.07105730 0.06700000 BTC_ETH
0.07105730 0.06700000
0.03130300 0.02700000 BTC_XMR
0.03130300 0.02700000
我的问题是,$pairname为什么在一开始时不会发出回声?
我做错了什么
谢谢。问题可能是pairname包含字符\r,如
bash-x script.sh
+ pairname=$'BTC_XMR\r'
因为您使用了不带-e的echo,这应该不是问题,但我不知道为什么,echo处理这个转义字符,然后返回到行的第一个字符并覆盖pairname
我的答案是使用cut-d
而不是cut-c
来获取pairname
pairname=$(cat /tmp/crex24.txt | grep -e "PairName" | sed -n "${count}p" | cut -d: -f2 | cut -d\" -f2)
给你
++++++++++++++++ CREX 24 ++++++++++++++++
0.01663970 0.01574956 BTC_LTC
BTC_LTC 0.01663970 0.01574956
0.07105730 0.06700000 BTC_ETH
BTC_ETH 0.07105730 0.06700000
0.03130300 0.02700000 BTC_XMR
BTC_XMR 0.03130300 0.02700000
现在我们在开始时有了pairname在/tmp/crex24.txt文件中是什么?看起来,
$pairname
只是空的。问题是pairname的结尾包含\r符号,因此它后面的任何内容都将替换它。@huz_-akh您希望输出实际是什么样子的?另外,不要对子shell使用反勾号,请参见Kokogino:不,正如您在上面的live PTRK中所看到的,它不是空的:我不知道\r,我将进一步研究它。边缘:我想要$pairname在开始时我需要输出到8位小数,这就是为什么我使用cut-cDoes pairname也需要8个字符长?我不这样认为,这是可选的。感谢使用bash-x
的调试命令和\r\n。我学到了一些新东西。