comment référencer une variable dans une coquille de poisson avec un repli par défaut

Réponses:

10

Je crois que vous avez besoin d'une variable temponaire (ou d'une fonction). S'il $TESTn'existe pas, il est étendu à rien et $test_orne contient que 1. Ce serait bien d'avoir un vrai moyen de le faire, mais actuellement la syntaxe est un problème, et il ne semble pas que ce soit vraiment nécessaire pour la plupart des utilisations.

set test_or $TEST 1
echo $test_or[1]

De plus, si tout ce que vous voulez, c'est modifier $TESTs'il n'existe pas déjà, vous pouvez utiliser set -q.

set -q TEST; or set TEST 1
echo $TEST
Konrad Borowski
la source
6

Pour référencer une variable et fournir une valeur par défaut en ligne, vous pouvez utiliser une substitution de commande contenant un conditionnel qui s'applique echoaux deux branches.

> 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

Comme il s'agit d'une sorte de verbose, vous pouvez initialiser la variable sur une ligne différente lorsqu'elle n'est pas définie.

> echo $otherVar

> set -q otherVar; or set otherVar 'a default value'
> echo $otherVar
a default value

Si vous voulez vraiment pouvoir remplacer une ligne par défaut, vous pouvez le faire dans une fonction en utilisant l'indirection, puis appeler cette fonction.

> 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
Patrick Redmond
la source