Author Topic: Чё меня бесит  (Read 667658 times)

0 Members and 1 Guest are viewing this topic.

Offline myst

  • Posts: 35471
Reply #575 on: April 29, 2010, 18:46
Если написать '\t' программа как коммандлайн аргумент получит сиквенс слэш и буква тэ.
Спасибо, Кэп. :)

Если написать $'\t', то программа получит в качестве агрумента характер 0x09.
Это не так.

Offline RawonaM

  • Posts: 43596
Reply #576 on: April 29, 2010, 18:49
Если написать $'\t', то программа получит в качестве агрумента характер 0x09.
Это не так.
А как?

Offline myst

  • Posts: 35471
Reply #577 on: April 29, 2010, 18:50
Где здесь логика — не знаю?
Логики нет. Команды — кто в лес кто по дрова. Юниксвей, блин. :wall: За стоко лет нормальный инструмент сделать не могут, помойка из костылей! >(

Reply #578 on: April 29, 2010, 18:50
Если написать $'\t', то программа получит в качестве агрумента характер 0x09.
Это не так.
А как?
В кавычках, я же выше написал. Без кавычек TAB теряется во время разбора командной строки. И всё ведь это надо помнить! Идиотизм! :wall:

Offline RawonaM

  • Posts: 43596
Reply #579 on: April 29, 2010, 18:53
Основная проблема в том, что echo \t напечатает одну букву t. А sort -t \t с радостью скушает эту букву t как разделитель полей, и не выдаст сообщение о многозначном разделителе. Это антиинтуитивно! \t должна возвращать там!
Не понял что значит в этом предложении "многозначный разделитель".
В каком смысле она должна? Чтобы ввести таб, нужно ввести \ и после него таб. Не уверен, что коммандная строка это позволяет, проверьте. Слэш передает следующий карактер как есть, не понимаю какие у вас с этим проблемы. Ваше интуитивное понимание очень ограничит пользователя, по-моему.

Offline Demetrius

  • Posts: 12352
  • Бес джинн фея колдунчик
Reply #580 on: April 29, 2010, 18:53
Интересно, во что оно превращается и что оно считает аргументом?  :???
В символ табуляции, естественно. Только этот символ съедается парсером командной строки.
Не-а! Опыты с echo показали, что превращается оно в обычный t!
Quote from: myst
Если написать $'\t', то программа получит в качестве агрумента характер 0x09.
Это не так.
Так. Если, конечно, 0x09 — код таба. Кавычки тоже съедаются bash’ем, а самой программе передаётся табуляция «в чистом виде». Могу написать небольшую проверочную программу на сях, если не верите.
«Честного не жди слова, // Я тебя предам снова»

Offline RawonaM

  • Posts: 43596
Reply #581 on: April 29, 2010, 18:54
Где здесь логика — не знаю?
Логики нет. Команды — кто в лес кто по дрова. Юниксвей, блин. :wall: За стоко лет нормальный инструмент сделать не могут, помойка из костылей! >(
По-моему ты просто не докурил доки. Инструмент практически идеальный. Парочку страниц сжатого объяснения и все становится на свои места.

Reply #582 on: April 29, 2010, 18:55
Если написать $'\t', то программа получит в качестве агрумента характер 0x09.
Это не так.
А как?
В кавычках, я же выше написал. Без кавычек TAB теряется во время разбора командной строки. И всё ведь это надо помнить! Идиотизм! :wall:
По-моему ты ошибаешься.

Offline myst

  • Posts: 35471
Reply #583 on: April 29, 2010, 18:55
А sort -t \t с радостью скушает эту букву t как разделитель полей, и не выдаст сообщение о многозначном разделителе.
Нет, шелл превратит \t в символ табуляции.

Reply #584 on: April 29, 2010, 18:57
По-моему ты просто не докурил доки. Инструмент практически идеальный. Парочку страниц сжатого объяснения и все становится на свои места.
Под инструментом я здесь имею в виду, весь пучок «замечательно» подогнанных друг под друга и под задачи обработки текстов гнусных утилит.

Offline RawonaM

  • Posts: 43596
Reply #585 on: April 29, 2010, 18:58
Онлайн юниксовый bash для тестов: http://cb.vu/
Щас посмотрим.

Offline myst

  • Posts: 35471
Reply #586 on: April 29, 2010, 18:59
Если написать $'\t', то программа получит в качестве агрумента характер 0x09.
Это не так.
А как?
В кавычках, я же выше написал. Без кавычек TAB теряется во время разбора командной строки. И всё ведь это надо помнить! Идиотизм! :wall:
По-моему ты ошибаешься.
По-моему, ты сам не проверял, не так ли? ;)

Reply #587 on: April 29, 2010, 19:00
Онлайн юниксовый bash для тестов: http://cb.vu/
Щас посмотрим.
И как ты это собираешься узнать онлайн? :o

Offline Demetrius

  • Posts: 12352
  • Бес джинн фея колдунчик
Reply #588 on: April 29, 2010, 19:00
Ваше интуитивное понимание очень ограничит пользователя, по-моему.
Не ограничит. У буквы t нет специального значение, поэтому её экранирование всё равно никому в голову не придёт. \t должно возвращать либо \t, либо табуляцию.

А sort -t \t с радостью скушает эту букву t как разделитель полей, и не выдаст сообщение о многозначном разделителе.
Нет, шелл превратит \t в символ табуляции.
Да нет же. Проверьте!
«Честного не жди слова, // Я тебя предам снова»

Offline RawonaM

  • Posts: 43596
Reply #589 on: April 29, 2010, 19:01
Quote
Ваше интуитивное понимание очень ограничит пользователя, по-моему.
Не ограничит. У буквы t нет специального значение, поэтому её экранирование всё равно никому в голову не придёт. \t должно возвращать либо \t, либо табуляцию.
А если у меня цикл и неизвестно, какой символ будет за слэшем?

Reply #590 on: April 29, 2010, 19:02
Какой-то неправильный тот баш онлайн, приду домой потестирую.

Offline Demetrius

  • Posts: 12352
  • Бес джинн фея колдунчик
Reply #591 on: April 29, 2010, 19:03
Исходный файл:
BaytChingt500000tChina
JacktArat250000tIndonesia
CruellatLumpert725000tMalaysia


Команда:
sort -t \t +2 -3 donors >res

Файл res:
JacktArat250000tIndonesia
BaytChingt500000tChina
CruellatLumpert725000tMalaysia


Вывод: программа восприняла t как разделитель.
«Честного не жди слова, // Я тебя предам снова»

Offline RawonaM

  • Posts: 43596
Reply #592 on: April 29, 2010, 19:04
По-хорошему это все должно настраиваться параметрами. И они где-то есть, я вам почти гарантирую.

Offline myst

  • Posts: 35471
Reply #593 on: April 29, 2010, 19:04
Да нет же. Проверьте!
Я уже всё давным-давно проверил. Вы каким образом проверяли?

Reply #594 on: April 29, 2010, 19:06
А нет, я неправ. Действительно в t.

Reply #595 on: April 29, 2010, 19:07
По-хорошему это все должно настраиваться параметрами. И они где-то есть, я вам почти гарантирую.
Ты о чём?

Offline RawonaM

  • Posts: 43596
Reply #596 on: April 29, 2010, 19:08
По-хорошему это все должно настраиваться параметрами. И они где-то есть, я вам почти гарантирую.
Ты о чём?
О поведении баша и что куда и как он передает.

Offline myst

  • Posts: 35471
Reply #597 on: April 29, 2010, 19:09
Quote
Ваше интуитивное понимание очень ограничит пользователя, по-моему.
Не ограничит. У буквы t нет специального значение, поэтому её экранирование всё равно никому в голову не придёт. \t должно возвращать либо \t, либо табуляцию.
А если у меня цикл и неизвестно, какой символ будет за слэшем?
Несколько раз прочитал, даже пытался представить.

Offline Demetrius

  • Posts: 12352
  • Бес джинн фея колдунчик
Reply #598 on: April 29, 2010, 19:09
А если у меня цикл и неизвестно, какой символ будет за слэшем?
Вместо экранирования первого символа всё равно будут нужны кавычки.
Я не представляю ситуацию, где нужно экранировать именно первый символ.
«Честного не жди слова, // Я тебя предам снова»

Offline myst

  • Posts: 35471
Reply #599 on: April 29, 2010, 19:10
По-хорошему это все должно настраиваться параметрами. И они где-то есть, я вам почти гарантирую.
Ты о чём?
О поведении баша и что куда и как он передает.
Эскейпы настраиваются параметрами? Первый раз слышу.