Автор Тема: сравняване на променливи  (Прочетена 3725 пъти)

gotha

  • Напреднали
  • *****
  • Публикации: 551
    • Профил
    • WWW
сравняване на променливи
« Отговор #15 -: Jan 16, 2007, 13:46 »
Имаш някои C забежки. Примерно :
let i=$((i - 1))
трябва да е :
let i="$i+1"
Не знам доколко моя вариант е правилен, но твоя със сигурност не работи. '<img'> За мен по-важно беше да разбера що е туй масив в bash, така че тези неща не са от значение.
Активен

blurmind

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
сравняване на променливи
« Отговор #16 -: Jan 16, 2007, 14:25 »
Цитат

Имаш някои C забежки. Примерно :
let i=$((i - 1))
трябва да е :
let i="$i+1"


Пич, и двата варианта са правилни bash конструкции, но правят съвсем различни неща. Първото е т.нар. arithmetic expansion (и това можеш да го потърсиш в manpage-а на bash(1)) - значи "нека i приеме стойност i минус едно".

Второто конкатенира стойността на i със низа "+1" и го присвоява на i.

Т.е. ако имаме стойност i=5, то резултата от първото действие ще е, че i ще стане равно на 4, а от второто, че i ще стане равно на низа "5+1".

Цитат

Не знам доколко моя вариант е правилен, но твоя със сигурност не работи.


Ако под "не работи" имаш предвид, че не прави това, което ти искаш - много вероятно е да е така. Ако имаш предвид, че не се изпълнява, смисъл дава грешка или нещо от тоя род - еми тествал съм го при мен преди да го пусна във форума и работи.

Именно това имах предвид под "забележка: не гарантирам за вярност на горния скрипт", а именно - не гарантирам, че прави това, което искаш. Иначе гарантирам, че работи така както съм имал предвид да работи.

Цитат

За мен по-важно беше да разбера що е туй масив в bash, така че тези неща не са от значение.


Скрипта, който пуснах трябваше да е демонстрация за работа с масиви в bash. Ако не съм успял да ти помогна с него - съжалявам, но повече не мога да направя.


Поздрави.



Активен

radoulov

  • Напреднали
  • *****
  • Публикации: 116
    • Профил
сравняване на променливи
« Отговор #17 -: Jan 16, 2007, 14:26 »
Цитат (gotha @ Ян. 16 2007,14:46)
Имаш някои C забежки. Примерно :
let i=$((i - 1))
трябва да е :
let i="$i+1"
Не знам доколко моя вариант е правилен, но твоя със сигурност не работи. '<img'>

Можеш ли да дадеш пример къде/кое точно не работи?
Ако говорим за bash:

$ echo $0 && echo $BASH_VERSION
-bash
3.00.15(1)-release
$ i=1
$ let i=$((i + 1))
$ echo $i
2
$ i=1
$ let i="$i+1"
$ echo $i
2

Като всъщност в bash е достатъчно:

$ i=1
$ i=$((i+1))
$ echo $i
2

или за по-новите версии на bash:

$ i=1
$ i=$((++i))
$ echo $i
2



Активен

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
сравняване на променливи
« Отговор #18 -: Jan 16, 2007, 14:58 »
Прочитайки поста на radoulov се усетих, че съм в грешка с предишния си пост, а именно:

let i="$i+1" е същото като let i=$((i+1))

докато при само

i="$i+1" ще се получи конкатенацията, за която писах. Останалата част от поста ми важи.
Активен

gotha

  • Напреднали
  • *****
  • Публикации: 551
    • Профил
    • WWW
сравняване на променливи
« Отговор #19 -: Jan 16, 2007, 17:49 »
Всъщност: вие сте прави, аз - не.
@Hapkoc Имах в предвид, че наистина ми помогна да разбера това, което ми трябваше (масивите в bash), без значение дали скрипта ти е верен или не.
Аз си направих цикъла по малко по-различен начин.

Цитат

let i="$i+1" е същото като let i=$((i+1))

Относно това, преди време бях пробвал let i=$((i+1)) в цикъла, но ми даде някаква грешка (вече не помня каква) и от тогава съм останал с впечатлението, че този вариант не работи.
Активен

blurmind