2016-02-18 7 views
1

Итак, прежде всего, это домашнее задание. Просто борюсь с чем-то, что я не могу узнать слишком много информации о Google.Проблемы с символом escape оболочки c для *

Вопрос: напечатайте произведение целых чисел от 1 до введенного числа.

Итак, если мы вводим 4, мы даем 24 (1 * 2 * 3 * 4) в качестве выхода.

Мой вопрос в том, что я не могу понять, как избежать символа *, чтобы связать его с моей строкой. У меня есть работа над оболочкой bourne, но продолжайте работать в этой проблеме в c shell.

@ temp = 1 
@ ans = 1 
while ($temp <= $number) 
    @ ans = ($ans * $temp) 
    @ temp = ($temp + 1) 
end 
set ans = "$ans (" 
@ count = 1 
while ($count <= $number) 
    set ans = "$ans$count" 
    @ count = ($count + 1) 
    if ($count <= $number) then 
     set ans = "$ans*" 
    endif 
end 
set ans = "$ans)" 
echo $ans 

Любые помощь или указатели будут очень признательны. Спасибо!

ответ

1

set star = "*" 
set ans = "$ans$star" 

Редактировать How do I escape the wildcard/asterisk character in bash? Цитаты необходимы для эхо:

echo "$ans" 
+0

Мысль об этом. Фактически пробовал это уже до публикации. Я все еще получаю эхо: нет совпадения. при попытке выставить эс. – codenko

+0

Вы связываетесь с вопросом bash. Это примерно csh. – Carpetsmoker

1

Когда вторя переменные, использовать двойные кавычки вокруг переменной (echo "$ans"), чтобы избежать имеющих s ад подстановок метасимволов в значении переменной:

(файл сценария: prod.csh):

#!/bin/tcsh 

@ number = 6 
@ temp = 1 
@ ans = 1 
while ($temp <= $number) 
    @ ans = ($ans * $temp) 
    @ temp = ($temp + 1) 
end 
set ans = "$ans (" 
@ count = 1 
while ($count <= $number) 
    set ans = "$ans$count" 
    @ count = ($count + 1) 
    if ($count <= $number) then 
     set ans = "$ans*" 
    endif 
end 
set ans = "$ans)" 
echo "$ans" 

Пример запуска:

$ tcsh prod.csh 
720 (1*2*3*4*5*6) 
$ 
+0

Вы также можете использовать 'set noglob', что иногда полезно, поскольку добавление цитат может оказаться сложным в некоторых ситуациях. – Carpetsmoker