як я посилаюсь на змінну в рибній оболонці із резервним резервом


16

Яка шкаралупа риби еквівалентна наступному башту:

echo ${TEST:-1}

У bash це буде надрукувати значення TEST, якби воно було, або 1, якщо його не було.


Дивіться також github.com/fish-shell/fish-shell/isissue/… для пояснення деяких технічних працівників.
webwurst

Відповіді:


10

Я вважаю, що вам потрібна тимчасова змінна (або функція). Якщо $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

6

Для посилання на змінну та надання рядкового значення за замовчуванням ви можете використовувати підстановку команд, що містить умовний, який робить 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.