Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > *NIX системы: Общие вопросы > Debian 6, шелл, сравнение строк


Автор: KasMP 14.11.2010, 15:30
Использую http://rutracker.org/forum/viewtopic.php?t=3225483.

При программировании в шелле не могу сравнить строки - результат сравнения всегда положителен.

Код
if [ "aa"=="ab" ]; then echo "yes"; else echo "no"; fi;
Код
if [ "aa"!="ab" ]; then echo "yes"; else echo "no"; fi;
Код
if [ "aa">"ab" ]; then echo "yes"; else echo "no"; fi;
Код
if [ "aa"<"ab" ]; then echo "yes"; else echo "no"; fi;


Во всех случаях выводится "yes". С 'if test "aa"=="ab"', разумеется, аналогичная история.

Была попытка делать даже так:
Код
if (("aa"=="ab")); then echo "yes"; else echo "no"; fi;

В этом случае все работает правильно, но только до тех пор, пока строки состоят из символов латинского алфавита, а мне бы хотелось самые разные строки.

Помогите, пожалуйста smile!!
Меня уже достала эта досадная ошибка или "ошибка" - столько времени на нее угрохано!!!!!

Автор: Void 14.11.2010, 16:56
man [
Код
[ "aa" = "aa" ]

Код
[ "aa" != "ab" ]

Лексикографическое сравнение строк есть в bash, но не в стандартном POSIX shell:
Код
[[ "ab" > "aa" ]]

Код
[[ "aa" < "ab" ]]

(( ... )) — вычисление арифметических выражений.

Автор: KasMP 14.11.2010, 17:02
Цитата(Void @  14.11.2010,  16:56 Найти цитируемый пост)
man [

Цитата(Void @  14.11.2010,  16:56 Найти цитируемый пост)
(( ... )) — вычисление арифметических выражений. 

Void, я знаю, что такое "[" (второе имя файла с тем же inode, что и у файла test) и "((...))" smile .

Цитата(Void @  14.11.2010,  16:56 Найти цитируемый пост)
Лексикографическое сравнение строк есть в bash, но не в стандартном POSIX shell:

Спасибо smile .

Автор: Void 14.11.2010, 17:06
Цитата(KasMP @  14.11.2010,  19:02 Найти цитируемый пост)
Void, я знаю, что такое "[" (второе имя файла с тем же inode, что и у файла test) и "((...))"

Тогда непонятно удивление по поводу неработающих операторов — их нет в списке поддерживаемых.

Автор: KasMP 14.11.2010, 17:12
Цитата(Void @  14.11.2010,  17:06 Найти цитируемый пост)
Тогда непонятно удивление по поводу неработающих операторов — их нет в списке поддерживаемых. 

Ну, про не поддержку в одном стандарте и поддержку в другом я не знала (и очень сильно удивлялась!!)... А про арифметические выражения написала для того, чтобы у читающих возникло больше желания помочь - тому, кто что-то попытался сам, всегда хочется помочь больше (и здесь я результату уже нисколько не удивлялась).

P.S.. А есть какой-нибудь эмулятор шелла с его основными стандартными командами под Windows smile ?

Автор: kemiisto 14.11.2010, 17:56
Цитата(KasMP @  14.11.2010,  15:12 Найти цитируемый пост)
P.S.. А есть какой-нибудь эмулятор шелла с его основными стандартными командами под Windows smile ? 

http://www.cygwin.com/ ?

Автор: KasMP 17.11.2010, 08:37
kemiisto, smile .

Судя по описанию,
Цитата(cygwin.com)

What Is Cygwin?

Cygwin is a Linux-like environment for Windows. It consists of two parts:
  •  A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing substantial Linux API functionality.
  •  A collection of tools which provide Linux look and feel.
...

What Isn't Cygwin?
  •  Cygwin is not a way to run native linux apps on Windows. You have to rebuild your application from source if you want it to run on Windows.
  •  Cygwin is not a way to magically make native Windows apps aware of UNIX ® functionality, like signals, ptys, etc. Again, you need to build your apps from source if you want to take advantage of Cygwin functionality. 


это именно то, что нужно smile .
Выбрала рекомендуемый набор пакетов (модулей, частей, или как они правильно называются) для установки, скачала их, установила... Спасибо smile smile .

P.S.. Самое интересное, что когда увидела в твоем посте слово "cygwin", то в памяти моментально воскресло, как сколько-то лет назад я до этого слова докопалась и даже как-то изучала его... Скорее всего, диалаповский интернет тогда тормознул процесс smile. Сейчас вспомнилось только то, что все это связано с UNIX smile smile .

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)