Macos ';计算';在while循环中导致bash脚本中出现未定义的变量错误
下面的代码是我正在编写的一个更大的bash脚本的一个片段,用于解析氨基酸序列并基于特定的氨基酸对执行计算。为了简单起见,我缩短了它并使其自包含-但我遇到的问题是,如果我运行示例测试计算“calc…”行(下面注释掉了该行),我会得到一个“…未定义”错误-该错误返回到while read循环中的变量。也许这与子shell和/或变量可访问性有关,但我对解决方案感到困惑,尤其是因为我有类似的脚本可以工作 任何帮助都将不胜感激另外,我在MacOSX终端上运行这个Macos ';计算';在while循环中导致bash脚本中出现未定义的变量错误,macos,bash,while-loop,calculator,Macos,Bash,While Loop,Calculator,下面的代码是我正在编写的一个更大的bash脚本的一个片段,用于解析氨基酸序列并基于特定的氨基酸对执行计算。为了简单起见,我缩短了它并使其自包含-但我遇到的问题是,如果我运行示例测试计算“calc…”行(下面注释掉了该行),我会得到一个“…未定义”错误-该错误返回到while read循环中的变量。也许这与子shell和/或变量可访问性有关,但我对解决方案感到困惑,尤其是因为我有类似的脚本可以工作 任何帮助都将不胜感激另外,我在MacOSX终端上运行这个 #!/bin/bash #Set inp
#!/bin/bash
#Set input
Seq=HTCHMAREQEMNMHG
SeqMAX=${#Seq}
#set start position for read
Pos=1
#Analyse sequence
echo -e "\nReading: $Seq "
#Read sequence, one character at a time
while read -r -n1 Res ; do
#If Res variable has hit a "blank", then move on
if [[ $Res = "" ]] ; then
break
#Else, if Res variable is the first
elif [[ $Pos = "1" ]] ; then
#Calculate rate
#UNCOMMENTING THIS LINE CAUSES ERROR
#calc 9 + 10
echo "$Left $Right"
Pos=$((Pos+1))
Left=$Res
#Else, if Res variable is the last
elif [[ $Pos = $SeqMAX ]] ; then
Left=$Res
Right=xC
###CALC............
Pos=$((Pos+1))
echo -e "$Left $Right"
#Finally, if charcter is internal
else
Right=$Res
echo "$Left $Right"
Left=$Res
Pos=$((Pos+1))
fi
done < <(echo $Seq)
exit
#/bin/bash
#设置输入
Seq=htchmareqemnhg
SeqMAX=${Seq}
#设置读取的起始位置
位置=1
#分析序列
echo-e“\n正在阅读:$Seq”
#读取序列,一次读取一个字符
而read-r-n1 Res;做
#如果Res变量已命中“空白”,则继续
如果[$Res=”“];然后
打破
#否则,如果Res变量是第一个
elif[$Pos=“1”];然后
#计算比率
#取消对此行的注释会导致错误
#计算9+10
回显“$左$右”
位置=$((位置+1))
左=$Res
#否则,如果Res变量是最后一个
elif[[$Pos=$SeqMAX]];然后
左=$Res
右=xC
###计算。。。。。。。。。。。。
位置=$((位置+1))
echo-e“$左$右”
#最后,如果character是内部的
其他的
右=$Res
回显“$左$右”
左=$Res
位置=$((位置+1))
fi
完成<似乎calc
从标准输入读取数据,因此您需要防止它在执行read
命令时使用提供给的流中的数据:
calc 9 + 10 < /dev/null
calc 9+10
您缺少:'
尝试:
calc“9+10”暂时忽略您试图在bash
中执行数据处理的原因,calc
在哪里定义?确切的错误消息是什么?calc是我安装的一个命令行计算器工具,因为它易于使用,具有更高的功能:但是如果您知道一个更好的工具,它不会引发此错误,我愿意接受建议。至于确切的错误消息,-对于我提供的代码,它是“TCHMAREQEMNMHG”未定义。是否从标准输入读取calc
?它声称未定义的字符串是读取
消耗第一个字符后标准输入中剩下的字符串。也许calc9+10
会有所不同。或者您正在使用另一个未显示的对calc
的调用?谢谢-添加calc
从循环继承其标准输入,与read
相同,因此两者都从