Como faço para referenciar uma variável no shell de peixes com um fallback padrão

16

Qual é a casca do peixe equivalente à seguinte festança:

echo ${TEST:-1}

No bash, isso imprimiria o valor de TEST se houvesse um ou 1 se não houvesse.

Scott B
fonte
Veja também github.com/fish-shell/fish-shell/issues/… para obter explicações sobre alguns mantenedores.
Webwurst # 30/19

Respostas:

10

Eu acredito que você precisa de variável temporária (ou uma função). Se $TESTnão existir, é expandido para nada e $test_orcontém apenas 1. Seria bom ter uma maneira real de fazer isso, mas atualmente a sintaxe é um problema e não parece que seja realmente necessária para a maioria dos propósitos.

set test_or $TEST 1
echo $test_or[1]

Além disso, se tudo o que você deseja é modificar $TESTse já não existe, você pode usá-lo set -q.

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

Para fazer referência a uma variável e fornecer um valor padrão em linha, você pode usar a substituição de comandos que contém uma condicional que ocorre echonos dois ramos.

> 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

Como isso é meio detalhado, você pode inicializar a variável em uma linha diferente quando não estiver definida.

> echo $otherVar

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

Se você realmente deseja a capacidade de substituir um padrão em linha, pode fazê-lo em uma função usando indiretamente e, em seguida, chamar essa função.

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