Идиома, которую я использую,
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
Я полагаю, что Вам нужна 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
Чтобы ссылаться на переменную и обеспечить значение значения по умолчанию, вы можете использовать подстановку команды, содержащую условную, который делает 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