我正在为shell脚本编写汇编程序的代码(下面是它的一部分)。它必须将汇编助记符转换为机器代码,这些代码在“代码”子程序内的情况下相应地映射。但是如果将$ currComm设置为“D = A”,那么现在将设置为A(comp子程序内部)的$ comp_mne在“代码”子程序中没有进入相应的情况。相反,它进入默认情况下打印“无效comp”。
comp()
{
if [ `echo $currComm | awk '{print $2}'` = "=" ] ; then
comp_mne="`echo $currComm | awk '{print $3}'`"
elif [ `echo $currComm | awk '{print $2}'` = "\;" ] ; then
comp_mne="`echo $currComm | awk '{print $1}'`"
fi
echo "comp is $comp_mne"
code
}
code()
{
echo "checking for comp $comp_mne"
case "$comp_mne" in
"0")
echo -n "0101010-" >> ${file}.hack
;;
"1")
echo -n "0111111-" >> ${file}.hack
;;
"-1")
echo -n "0111010-" >> ${file}.hack
;;
"D")
echo -n "0001100-" >> ${file}.hack
;;
"A")
echo -n "0110000-" >> ${file}.hack
echo "found"
;;
"!D")
echo -n "0001101-" >> ${file}.hack
;;
"!A")
echo -n "0110001-" >> ${file}.hack
;;
"-D")
echo -n "0001111-" >> ${file}.hack
;;
"-A")
echo -n "0110011-" >> ${file}.hack
;;
"D+1")
echo -n "0011111-" >> ${file}.hack
;;
*)
echo "Invalid comp"
;;
esac
}
答案 0 :(得分:0)
\`echo $currComm | awk '{print $2}'\`
计算包含这些命令的文字字符串;它不执行这些命令。当你在一个角色前面放一个反斜杠时,角色失去了它的特殊含义并成为一个文字。
你想要的是这个:
"$(awk '{print $2}' <<< "$currComm")"
echo
。另一种安全方法是将echo
替换为printf '%s'
答案 1 :(得分:0)
您的个案陈述可以有:
"D"*) # Matches on any $comp_mne starting with D
;;
问题在于&#34; D + 1&#34;因为&#34; D&#34; *匹配$ comp_mne = D + 1,所以不会再触发低位的情况。所以你必须小心你所匹配的东西。