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.
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 (ifset-q someVar; echo $someVar;else; echo 'a default value'; end)
a default value
>set someVar 42> echo (ifset-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
Respostas:
Eu acredito que você precisa de variável temporária (ou uma função). Se
$TEST
não existir, é expandido para nada e$test_or
contém apenas1
. 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.Além disso, se tudo o que você deseja é modificar
$TEST
se já não existe, você pode usá-loset -q
.fonte
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
echo
nos dois ramos.Como isso é meio detalhado, você pode inicializar a variável em uma linha diferente quando não estiver definida.
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.
fonte