Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么一些变量在BASH的开头不起作用_Bash_Loops_Variables_Echo - Fatal编程技术网

为什么一些变量在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。我学到了一些新东西。