回答:
一時変数(または関数)が必要だと思います。$TEST
存在しない場合は、何にも展開されず、$test_or
のみが含まれます1
。それを実際に行う方法があればいいのですが、現在は構文に問題があり、ほとんどの目的に本当に必要であるようには見えません。
set test_or $TEST 1
echo $test_or[1]
また、$TEST
まだ存在しない場合に変更するだけであれば、を使用できますset -q
。
set -q TEST; or set TEST 1
echo $TEST
変数を参照し、インラインでデフォルト値を提供するにはecho
、両方のブランチで実行する条件を含むコマンド置換を使用できます。
> echo (if set -q someVar; echo $someVar; else; echo 'a default value'; end)
a default value
> set someVar 42
> echo (if set -q someVar; echo $someVar; else; echo 'a default value'; end)
42
これは一種の冗長であるため、変数が設定されていないときに別の行で変数を初期化できます。
> echo $otherVar
> set -q otherVar; or set otherVar 'a default value'
> echo $otherVar
a default value
デフォルトのインラインを代用する機能が本当に必要な場合は、インダイレクションを使用して関数でそれを実行し、その関数を呼び出すことができます。
> function orDefault
set -q $argv[1]; and echo $$argv[1]; or echo $argv[2]
end
>
> echo $moreVar
> echo (orDefault moreVar 'a default value')
a default value
> set moreVar 42
> echo (orDefault moreVar 'a default value')
42