将文字字符串(例如“True”)转换为适当的bash布尔变量的最佳方法是什么。例如,java有java.lang.Boolean.valueOf(String)
现在我在Bash中使用它:
if [ "${answers[2]}" = "TRUE" ] ; then
clean=true;
else
clean=false;
fi
有没有办法做到这一点并避免使用IF语句?
编辑:澄清它不是通过选择我有包含“TRUE”的String变量而不是仅使用布尔变量。 对于完整的上下文,这是代码
ans=$(yad --title='YadExample' --form --field=Opt1:CHK FALSE --field=Opt2:CHK FALSE --field=Opt3:CHK TRUE);
#at this point the "yad" program is returning a string seperated by '|', e.g "TRUE|FALSE|TRUE"
IFS="|"
set -- $ans
answers=( $@ )
unset IFS
if [ "${answers[0]}" = "TRUE" ] ; then clean=true; else clean=false; fi
if [ "${answers[1]}" = "TRUE" ] ; then var2=true; else var2=false; fi
if [ "${answers[2]}" = "TRUE" ] ; then var3=true; else var3=false; fi
答案 0 :(得分:2)
您可以编写一个函数来为您进行转换:
function boolean() {
case $1 in
TRUE) echo true ;;
FALSE) echo false ;;
*) echo "Err: Unknown boolean value \"$1\"" 1>&2; exit 1 ;;
esac
}
answers=(TRUE FALSE TRUE)
clean="$(boolean "${answers[0]}")"
var2="$(boolean "${answers[1]}")"
var3="$(boolean "${answers[2]}")"
echo $clean $var2 $var3
打印
true false true
或者,有点发烧友:
function setBoolean() {
local v
if (( $# != 2 )); then
echo "Err: setBoolean usage" 1>&2; exit 1 ;
fi
case "$2" in
TRUE) v=true ;;
FALSE) v=false ;;
*) echo "Err: Unknown boolean value \"$2\"" 1>&2; exit 1 ;;
esac
eval $1=$v
}
answers=(TRUE FALSE TRUE)
setBoolean clean "${answers[0]}"
setBoolean var2 "${answers[1]}"
setBoolean var3 "${answers[2]}"
echo $clean $var2 $var3
答案 1 :(得分:1)
您可以使用以下内容:
[ "${answers[2]}" != "TRUE" ] ; clean=$?
如果您希望clean
在条件为真时设置为1,则需要反转比较的意义。
然后您的序列变为:
[ "${answers[0]}" != "TRUE" ] ; clean=$?
[ "${answers[1]}" != "TRUE" ] ; var2=$?
[ "${answers[2]}" != "TRUE" ] ; var3=$?