2015-01-26 2 views
1

Я написал этот код:TCSH/CSH | присвоить переменной с командами результат

 1 #!/bin/tcsh 
     2 
     3 set myFiles = `ls` 
     4 set i = 1; 
     5 echo "argc is $#argv" 
     6 while ($i <= $#argv) 
     7 $myFiles = `echo $myFiles | tr "$argv[$i]" " "` 
     8 echo "argv now is $argv[$i]" 
     9 echo "my files are : $myFiles" 
    10 @ i++; 
    11 end 
    12 echo "my files post proccess are $myFiles" 
    13 foreach name ($myFiles) 
    14 set temp = `cat $name` 
    15 echo "temp is : $temp" 
    16 unset temp 
    17 end 

Этот кусок должен получить список имен файлов в текущей папке и распечатать содержимое файлов , которые не указаны IE: папку имеет файлы: ABCDE , а вход: ABC , поэтому содержимое DE будет напечатано.

теперь логика верна, но у меня есть некоторые синтаксические вопросы относительно линии 7 (В) Я пытался с SED как хорошо, но я получаю «доступ запрещен» на консоль по какой-то причине, и Я действительно не знаю, как это исправить.

Таким образом, мне нужна на самом деле синтаксиса в отношении назначения переменной с выводами команд плюс включение других переменных в эти команды.

Надеется, что все в порядке ..

СПАСИБО!

+3

Вам не хватает 'set' на этой линии. Также вы не ставите знак доллара, когда вы назначаете переменную - '' 'означает интерполяцию. – tripleee

ответ

1

Обратите внимание: tr будет заменять все соответствующие символы, поэтому, если ваш вход включает в себя «A», он заменит все «A» на «» во всех именах файлов, возвращаемых ls.

Существует гораздо более чистое решение. Вы хотите, чтобы найти все файлы, исключить файлы, соответствующие вводимому и распечатать то, что осталось. Здесь вы найдете:

#!/bin/tcsh 

set exclude_names = "" 

# if any argument is passed in, add it as "! -name $arg" 
foreach arg ($*) 
    set exclude_names = "$exclude_names ! -name $arg" 
end 

# Find all files in the current dir, excluding the input 
# then print out the filtered set of files 
find . -maxdepth 1 -type f $exclude_names -exec cat {} + 
Смежные вопросы