魚もブール値を持っています:私はのようなものが欲しかった、これを行うための簡単な方法がなければなりませんか?
いいえ実際には、それが触発されたPOSIXシェルのように、実際には全くタイプを持っていません。すべての変数は文字列のリストです。
しかし、それははい
偽と真のコマンドがあります。これらのコマンドはそれぞれ1と0を返します。すべての戻り状況!= 0はエラーコードとみなされ、したがってfalseであり、0は真です(この点ではCの逆です)。
私がしたいのは、グローバル変数を設定すると、私が魚とヴィムで明るい配色を使用していることを意味します。それが設定されていない場合、私は暗いものを使用しています。
確かに、それは動作させることができます。これについてはいくつかの異なる方法があります。変数にがあるという事実を使用して、それが真であることを示す要素を使用するか、それを使用します。 1.
前者は
# Check if variable is "true" by checking if it has an element
if set -q LIGHT_COLORSCHEME[1]
# ...
# Flip the variable
set -q LIGHT_COLORSCHEME[1]; and set -e LIGHT_COLORSCHEME[1]; or set LIGHT_COLORSCHEME 1
のように働くだろう(もちろん、あなたも「フリップ」機能を作ることができます - 残念ながら、コマンドの戻りステータスではなく、変数の値に作用するキーワードである「ない」)
後者は、私はこの思い付いた
if test "$LIGHT_COLORSCHEME" = 1 # the "=" here tests string-equality, but that shouldn't matter.
# ...
# Flip the variable
test "$LIGHT_COLORSCHEME" = 1; and set LIGHT_COLORSCHEME 0; or set LIGHT_COLORSCHEME 1
次のようになります。
機能toggle_light_colorscheme のeval $ LIGHT_COLORSCHEME
もしあなたは何をするかeval
誤解しています。引数をコードとして実行します。私。コマンドとしてLIGHT_COLORSCHEME の値を実行しようとします。ですから、もしあなたが$ PATHのどこかに "1"というコマンドがあれば、それは実行されます!
条件をテストするには、test
を使用してください。
ありがとう、私は後者の例を使っています。違いは、変数を永続させたいので、普遍的なものでなければなりません。 –
巧妙なトリックは、 'test'とその終了値を使うことです: ' ["$ LIGHT_COLORSCHEME" -eq 1]; set LIGHT_COLORSCHEME $ status; ' ブール値が1のときは(ブール== 1)は「真」(ゼロ)、0のときは偽です。 –