21

私は関数型プログラミングのバグを見つけたので、当然のことながら、私にとって十分なものはもうありません。;)

したがって、bash では次のように記述できます。

case $status in
  "foo") status="bar" ;;
  "baz") status="buh" ;;
   *) status=$status ;;
esac

しかし、タイプミスが怖いので、次のように書きたいと思います。

status=case $status in
  "foo") "bar" ;;
  "baz") "buh" ;;
  *) $status ;;
esac

ケースは最後に実行されたコマンドの終了コードに評価されるため、2 番目の形式は無効です。これは、私が探しているものとはまったく異なります。

私が探しているものを達成するための簡単なハックはありますか?

4

3 に答える 3

5
status="baz"
status=$(case $status in
  "foo") echo "bar" ;;
  "baz") echo "buh" ;;
  *) echo $status ;;
esac)
echo "status: $status"

出力

$ ./shell.sh
status: buh
于 2010-02-18T00:43:49.180 に答える
-1

Bash 4 には連想配列があります。

# setup
unset vals i
indices=(foo baz)
val=(bar buh)
declare -A vals             # associative
for index in ${indices[@]}
do
    vals[$index]=${val[i++]}
done

$ # demos
$ status="foo"
$ status=${vals:-$status}
$ echo $status
bar
$ status="not found"
$ status=${vals:-$status}
$ echo $status
not found
于 2010-02-17T20:47:56.770 に答える