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

Идиома, которую я использую,

if ( $?prompt ) then
    # interactive commands here
endif

обратите внимание, что это записано $prompt (нижний регистр), нет $PROMPT.

% echo $prompt
%U%m%u:%B%~%b%#

% ssh localhost 'echo $prompt'
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
Password: 
prompt: Undefined variable.

Если $prompt всегда устанавливается, затем один из Ваших файлов запуска мог бы устанавливать его безусловно.

Это должно войти if ( $?prompt ) протестируйте также, например.

if ( $?prompt ) then
    set prompt='%B%m%b %C3>'

    # interactive commands here
endif

Тестирование, если вывод является терминалом, могло бы работать также.

if ({ test -t 0 }) then
    # interactive commands here
endif
16
08.07.2013, 11:29
2 ответа

Я полагаю, что Вам нужна temponary переменная (или функция). Если $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
10
27.01.2020, 19:48

Чтобы ссылаться на переменную и обеспечить значение значения по умолчанию, вы можете использовать подстановку команды, содержащую условную, который делает 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
6
27.01.2020, 19:48

Теги

Похожие вопросы