2013-11-22 2 views
1

Я совершенно запутался Когда я пытаюсь Ouput некоторых образцов с * в shell.The коде:неожиданного поведения сценария оболочки

#!/bin/bash 
for i in {1..10} 
do 
    tmpstr="" 
    for ((c=1;c<=i;c++)) 
    do 
      tmpstr=$tmpstr'*' 
    done 
    echo $tmpstr #add some string after tmpstr will work 
done 

Выход показывает мне результат ls команды в каждой строке, которая неожиданный. И код будет работать нормально, если я добавлю строку после echo $tmpstr. Например, echo $tmpstr" ". Так как это понимать?

ответ

4

Ваш скрипт генерирует следующий за tmpStr

* 
** 
*** 
etc. 

, что приводит к следующим эхо заявлений

echo * 
echo ** 
echo *** 
etc. 

Оболочка интерпретирует * в качестве шаблона и расширяет его, перечисляя все файлы текущий каталог.

Обратите внимание, что если вы поместите кавычки вокруг переменной оболочки:

echo "$tmpstr" 

Оболочка не расширяется подстановочные символы и выход

* 
** 
*** 
**** 
***** 
****** 
******* 
******** 
********* 
********** 
+0

Я думаю, что это point.But пространство после того, как строка заставит дикую карточку не работать, все равно мистерия. – Young

+0

Я не следую. Вы заявляете, что код отлично работает с echo $ tmpStr "". Поскольку вы написали это, нет никакого подстановочного знака, просто пробела. – EJK

+0

Я имею в виду 'echo $ tmpstr" "' внутри первого цикла, а не внутреннего. – Young

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