这是一个包含select语句的函数,除非您选择退出':
,否则该语句不会中断function func_set_branch () {
local _file=$1
local _expr=$2
local _bdate=$3
local _edate=$4
local _mid=$(awk -F'\t' -v ref="${_expr}" 'BEGIN {IGNORECASE = 1} match($0, ref) {print $5}' "$CONF")
if (( $(grep -c . <<<"${_mid}") > 1 )); then
mapfile -t arr <<< "${_mid}"
PS3="Please choose an option "
select option in "${arr[0]}" "${arr[1]}" quit
do
case $option in
1) _mid="${arr[0]}"; break 2;;
2) _mid="${arr[1]}"; break 2;;
quit) exit 0;;
esac
done
fi
sed "s#{{mid}}#${_mid}#
s#{{bdate}}#${_bdate}#
s#{{edate}}#${_edate}#" "$_file"
}
我尝试了不同级别的break
..没有骰子。在盯着这个waaaay太长时间后我错过了什么?
输出:
automation@automation-workstation2:~/scripts/branch-fines$ bash get_data.sh -f branch-fines.sql -B coulee -b 2014-01-01 -e 2014-12-31
coulee 2014-01-01 to 2014-12-31
1) 472754
2) 472758
3) quit
Please choose an option 1
Please choose an option 2
Please choose an option 3
automation@automation-workstation2:~/scripts/branch-fines$
更新
工作代码非常感谢rici和glenn jackman。
PS3="Please choose an option "
select option in "${arr[0]}" "${arr[1]}" quit
do
case $option in
"${arr[0]}") MID="${arr[0]}"; break;;
"${arr[1]}") MID="${arr[1]}"; break;;
quit) exit 0;;
esac
done
答案 0 :(得分:3)
在select
语句的主体中,指定的变量(在本例中为$option
)设置为所选单词的值,而不是其索引。这就是为什么quit
有效的原因;您是否正在检查$option
是quit
,而不是3
。同样,您应该检查${arr[0]}
和${arr[1]}
而不是1
和2
。
由于数组值不是1
或2
,case
语句中的子句不匹配,因此case
语句将不执行任何操作;在这种情况下,不执行break
,因此select
继续循环。