Если вы просто хотите рассматривать строку как литерал в sed
то для этого уже есть ответ:
escaped_testx="$(sed -e 's/[\/&]/\\&/g' <<< "$TEST"; echo x)"
escaped_test="${escaped_testx%x}"
Дополнительный x
нужен для того, чтобы иметь возможность обрабатывать новые строки в конце строки, которые в противном случае будут удалены подстановкой команды.
Во-первых, поймите, что (в csh)endif
нет -оп (нет операции )если нет ожидающих если (с )закрыть. Его выполнение не имеет никакого эффекта.
% endif
%
Таким образом, если ясно (из-за значения 1, что означает true для csh, точно так же, как в языке c ), что команды после if будут выполняться, нет необходимости откладывать их выполнение. исполнения, и им «позволено» действовать немедленно:
% if (1) then
% echo yes
yes
% echo no
no
% endif
Однако для ложного значения (0 )выполнение избегается до тех пор, пока не будет выполнен endif
.
% if (0) then
? echo yes
? echo no
? endif
%
Именно так работает csh.
Примечание :Я не получаю if: improper then
с if 0 then
. Может ошибка где-то в другом.
Ну... Может быть, стоит дать некоторые пояснения. Если я пишу (пробелов перед <enter>
, добавленных только для ясности, не обращайте на них внимания ):
% if 0 then <enter> !!!!!!!!!!!!!
? echo Hello there
? echo Yes
? endif
%
Я не получаю ошибки.
Если я напишу:
% if 0 then echo Hello there <enter> !!!!!!!!!!!!!
% if: Improper then.
Я понимаю вашу ошибку.
Значение 1
эквивалентно FALSE
на уровне оболочки.
Также имейте в виду, что csh
немного подозрительно, поскольку if
— это не ключевое слово csh
, а скорее встроенная команда.
В csh
встроенная команда if
вызывает отдельный синтаксический анализатор, который считывает оператор до тех пор, пока он не будет прочитан полностью.
Обратите внимание, что в отличие от FreeBSD и, возможно, Linux, csh
в Solaris не идентичен tcsh
, а представляет собой другой двоичный файл. Но даже tcsh
так себя ведет на Солярисе.
В общем, csh непоследовательно, см., например,.http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/