¿Cómo hago referencia a una variable en la concha de pescado con una reserva predeterminada?

Respuestas:

10

Creo que necesita una variable temporal (o una función). Si $TESTno existe, se expande a nada y $test_orsolo contiene 1. Sería bueno tener una forma real de hacerlo, pero actualmente la sintaxis es un problema, y ​​no parece que sea realmente necesaria para la mayoría de los propósitos.

set test_or $TEST 1
echo $test_or[1]

Además, si todo lo que desea es modificar $TESTsi aún no existe, puede usarlo set -q.

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

Para hacer referencia a una variable y proporcionar un valor predeterminado en línea, puede usar la sustitución de comandos que contiene un condicional que lo hace echoen ambas ramas.

> 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

Dado que esto es algo detallado, puede inicializar la variable en una línea diferente cuando no está establecida.

> echo $otherVar

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

Si realmente desea la capacidad de sustituir una línea predeterminada, puede hacerlo en una función utilizando la indirección y luego llamar a esa función.

> 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
fuente