我有这个函数接受3个参数,例如,一个包含4个数字和一个大写字母,例如:“1234A” 如果第二个参数大于第三个参数且小于第一个参数,我想打印1 我写了这个函数,我在每个参数的参数和每个参数的不同参数中切出了4个数字,我开始比较 但它没有打印出来的问题!!
任何人都知道如何用一个if语句而不是两个if语句来做事情?
我做了什么:<button id="addCust" class="addSort" onclick="appendRow('custList')">add customer</button>
<div class="custScroll">
<table id="custListTop" contenteditable="false">
<tr>
<td style="border-top-left-radius: 5px;">Customers</td>
<td style="border-top-right-radius: 5px;">Main Location</td>
</tr>
</table>
<table id="custList" contenteditable="true">
<tr>
<td>Someone</td>
<td>Somewhere</td>
</tr>
</table>
</div>
当我在bash中测试时,我什么也得不到,我得到一个空行.. 这是我测试它的方式:
function check {
curr_letter=`echo "$1" | cut -c5`
min_letter=`echo "$3" | cut -c5`
sm_letter=`echo "$2" | cut -c5`
curr_nums=`echo "$1" | cut -c1-4`
min_nums=`echo "$3" | cut -c1-4`
sm_nums=`echo "$2" | cut -c1-4`
if [[ sm_nums -eq curr_nums && sm_letter < curr_letter ]] ; then
if [[ sm_nums -eq min_nums && sm_letter > min_letter ]] ; then
echo 1
fi
if [[ sm_nums > min_nums ]] ; then
echo 1
fi
fi
if [[ sm_nums < curr_nums ]] ; then
if [[ sm_nums -eq min_nums && sm_letter > min_letter ]] ; then
echo 1
fi
if [[ sm_nums > min_nums ]] ; then
echo 1
fi
fi
}
答案 0 :(得分:2)
您可以在算术上下文$
中省略变量名中的((...))
。
在[[ ... ]]
范围内,您无法省略它。
您可以使用Bash自己的语法echo ... | cut -c...
轻松提取子字符串,而不是调用{var:start:length}
。
在[[ ... ]]
或((...))
内,
使用==
代替-eq
。
但请注意,<
和>
运算符按字典顺序排列在[[ ... ]]
内,但在算术上下文((...))
中按数字排序。
因此,字符串值变量(在您的示例中名为*_letter
)
应在[[ ... ]]
内进行比较,数值变量(在您的示例中名为*_nums
)应在((...))
内进行比较。
像这样:
function check() {
curr_letter=${1:4:1}
min_letter=${3:4:1}
sm_letter=${2:4:1}
curr_nums=${1:0:4}
min_nums=${3:0:4}
sm_nums=${2:0:4}
if (( sm_nums == curr_nums )) && [[ $sm_letter < $curr_letter ]]; then
if (( sm_nums == min_nums )) && [[ $sm_letter > $min_letter ]] ; then
echo 1
fi
if (( sm_nums > min_nums )) ; then
echo 1
fi
fi
if (( sm_nums < curr_nums )) ; then
if (( sm_nums == min_nums )) && [[ $sm_letter > $min_letter ]] ; then
echo 1
fi
if (( sm_nums > min_nums )) ; then
echo 1
fi
fi
}
最后,而不是p=`check "1617B" "1617A" "0000A"`; echo $p
,
更好的写这样:
echo $(check "1617B" "1617A" "0000A")
答案 1 :(得分:0)
为什么不只是
awk '$3 <= $2 && $2 <= $1 {print 1}'
或者如果你需要一个功能
check() { awk '$3 <= $2 && $2 <= $1 {print 1}' <<< "$@"; }
或
check() { awk "BEGIN{if($3 <= $2 && $2 <= $1) print 1}"; }