Ошибка в csh-скрипте

Я работаю с C-Shell, пытаюсь запустить этот скрипт

set callsTo = "`cut -d" " -f2 ${1}`"
echo $callsTo

cut получает данные из файла, который является первым параметром:

> ./myscript data

Мне нужно только второе поле из каждой строки: -f2.

После этого я хочу проверить, были ли сохранены данные, но я получаю или ошибку unmatched . или пустая строка. Что не так с моим скриптом?

Также, когда я использую #! /bin/tcsh -f, я получаю это сообщение

 tcsh [ -bcdefilmnqstvVxX ] [ argument ... ]

person lego69    schedule 31.05.2010    source источник


Ответы (3)


Двойные кавычки так не вкладываются.

Попробуй это:

set callsTo = "`cut -d' ' -f2 ${1}`"

Также, когда я использую #! /bin/tcsh -f я получаю это сообщение

tcsh [-bcdefilmnqstvVxX] [аргумент ...]

Это странно. Возможно ли, что после -f есть случайный символ, возможно, символ '\r' из окончания строки в стиле Windows? Каков результат head -1 *foo*.tcsh | od -c?

person Keith Thompson    schedule 24.08.2011

я не знаю tcsh но не должна эта строчка

set callsTo = "`cut -d" " -f2 ${1}`"

be

set callsTo = `cut -d" " -f2 ${1}`?

В bash я бы сделал так:

callsTo=`cut -d' ' -f2 $1`?

Надеюсь это поможет.

person Alberto Zaccagni    schedule 31.05.2010
comment
callsTo=$(cut -d' ' -f2 "$1") в Баше. $() более предсказуем для пользователей и лучше вкладывается по сравнению с обратными кавычками. Я не знаю эквивалента csh, но его поиск может помочь. - person ; 31.05.2010
comment
csh не имеет синтаксиса $(...); у него есть только обратные кавычки. - person Keith Thompson; 25.08.2011

set filename=echo ${1}|cut -f1 -d'#'
echo $filename
Попробуйте это

person kaka    schedule 15.09.2011