Титла: Какъв резултат ще се изведе при изп на текстов файл от Bash команди Публикувано от: TomTom в Apr 26, 2012, 16:58 Текстовият файл е :
set 1 1 1 1 n=0 m=0 for br do n='expr$n+$br' shift if test $n -ne 1 then echo $n else m='expr $m+1' echo $? fi done отг е 0 2 3 4 Разбирам какво се случва във for цикъла, но не разбирам как set 1 1 1 1 се връзва с br .Силно предполагам,навързвайки отг,че br в случай ще обхожда 1 2 3 4 ,т.к. 1-ците са 4... И още нещо - каква е ролята на shift в случая!? Знам, че при shift число - стойностите се изместват наляво,като нулевият не се пипа...Ама тук не е така... Супер начинаеща съм...засега и благодаря предварително :) Титла: Re: Какъв резултат ще се изведе при изп на текстов файл от Bash команди Публикувано от: neter в Apr 26, 2012, 18:09 Първо, имай предвид, че има голяма разлика между различните кавички. В скрипта си написала единични кавички (тази, която е на клавиша с двойната кавичка; предполагам, че сама си ги вписала, иначе нямаше да се получи показаният отговор), а в случая става дума за единичната кавичка, намираща се в горния ляв ъгъл до клавиша 1 на клавиатурата. Докато обикновената единична кавичка огражда низ, който да се ползва такъв, какъвто е вписан (без четене на променливи или изпълнение на код между кавичките), другата единична кавичка се ползва за команда, която трябва да се изпълни между тези кавички. Освен това уважавай интервалите ;) Ето го скрипта с правилните кавички и обяснения кой ред какво прави:
Код Shell има свойството да пази и безименни масиви и той се извиква в този for, за който няма зададено какво да се обхожда. Променливата $br не е обвързана с този масив. Тя само приема текущата стойност от масива при обхождането. Т.е., тъй като масива ни съдържа 4 единици, $br винаги е равно на 1. Тъй като при първото завъртане на цикъла $n=1, първата стойност от изведения на екрана резултат е изхода от командата Цитат expr $m + 1Тъй като действието е изпълнено успешно, статусът на командата е 0, и затова първата стойност в общия резултат е 0. Ако предизвикаме грешка в изпълнението на командата на този ред, вместо 0 може да ни се изпише 1 (за нефатална грешка) или 2 (за фатална грешка). При следващите завъртания на цикъла $n не е равно на 1, така че просто се извежда стойността на $n, която се увеличава всеки път с едно, заради командата Цитат expr $n + $brкъдето $br винаги е 1, тъй като само такива стойности имаме в масива. Титла: Re: Какъв резултат ще се изведе при изп на текстов файл от Bash команди Публикувано от: TomTom в Apr 26, 2012, 18:34 Всичко схванах и брагодаря за бързия отговор и перефектното обяснение ^_^
|