ТСХ/ЦСХ | назначить переменную с результатом команд

Я написал этот код:

      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: в папке есть файлы: A B C D E, а ввод: A B C, поэтому содержимое D E будет напечатано.

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

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

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

БЛАГОДАРНОСТЬ !


person Aviad    schedule 26.01.2015    source источник
comment
Вам не хватает set в этой строке. Также вы не ставите знак доллара при назначении переменной - $ означает интерполяцию.   -  person tripleee    schedule 26.01.2015


Ответы (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 {} +
person Victor Burenkov    schedule 08.09.2015