2013-10-01 7 views
0

Итак, я новичок в kornshell, и я не могу заставить свое заявление if работать. Это то, что я в моем файлеKornshell Если оператор не работает

if $1 = "Y" 
then 
    echo "I am here"; 
fi 

И когда я исполняю файл это ошибка, я получаю:

test.ksh[1]: Y: not found [No such file or directory] 

Что я делаю неправильно?

ответ

2

if должен сопровождаться командой; он проверяет, успешно ли завершена команда или нет.

Вы можете использовать команду test или эквивалентную команду [, или Ksh предопределённые [[:

if test "$1" = Y 

или

if [ "$1" = Y ] 

или

if [[ $1 == Y ]] 

Приведенные выше команды успеха, если условие, указанное его аргументами правда. man test должен предоставить вам список допустимых условий. Не забудьте указать ваши переменные для команд test и [; если нет, неопределенные переменные не будут заменены ничем (т. е. будут удалены), которые обычно представляют собой отчет об ошибке.

Если вам не нужна строгая совместимость с Posix, используйте ksh встроенный [[, который также доступен в bash. Это более удобно, потому что он не разбивает слово на свои аргументы, поэтому переменные расширения не нужно указывать. Обратите внимание, что с [[ правая часть сравнения == представляет собой шаблон («глобус»), если он не указан, поэтому вам понадобятся кавычки с правой стороны, если вам нужна буквальная проверка равенства.

+1

ksh имеет встроенную тестовую команду с именем '[[' - если вы ее используете, вы должны передать ']]' в качестве последнего аргумента. В двойных скобках '=' и '==' фактически являются операторами сопоставления шаблонов, поэтому вы можете проверить, начинается ли слово * с * "Y": 'if [[$ 1 == Y *]]; затем'. Котировки вокруг переменных строго не требуются в двойных скобках, потому что «Разделение поля и генерация имени файла не выполняются над словами между [[и]]» - ref ksh (1) man page –

+0

@glennjackman: хорошая точка, я был пытаясь быть слишком общим. Я отредактирую. – rici

+0

@glennjackman Должен быть вопрос с этим вопросом. Я знаю, что я часто отвечал на варианты. – rici

Смежные вопросы