3

リテラル文字列を変換する最良の方法は何ですか(たとえば、「True」を適切なbashブール変数に変換します)。たとえば、javaにはjava.lang.Boolean.valueOf(String)があります

現在、私はこれをBashで使用しています。

if [ "${answers[2]}" = "TRUE" ] ; then
    clean=true; 
else 
    clean=false; 
fi

それを実行してIFステートメントを回避する方法はありますか?

編集:ブール変数を使用するだけでなく、「TRUE」を含む文字列変数があることを選択せず​​に明確にするため。フルコンテキストの場合、これはコードです

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
4

2 に答える 2

2

次のようなものを使用できます。

[ "${answers[2]}" != "TRUE" ] ; clean=$?

clean条件が真の場合に1に設定する場合は、比較の意味を逆にする必要があります。

シーケンスは次のようになります。

[ "${answers[0]}" != "TRUE" ] ; clean=$?
[ "${answers[1]}" != "TRUE" ] ; var2=$?
[ "${answers[2]}" != "TRUE" ] ; var3=$?
于 2013-02-05T05:17:41.540 に答える
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
于 2013-02-05T05:27:50.160 に答える