Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Чё меня бесит

Автор Алексей Гринь, марта 27, 2010, 21:09

0 Пользователи и 2 гостей просматривают эту тему.

myst

Цитата: RawonaM от апреля 29, 2010, 17:27
Если написать '\t' программа как коммандлайн аргумент получит сиквенс слэш и буква тэ.
Спасибо, Кэп. :)

Цитата: RawonaM от апреля 29, 2010, 17:27
Если написать $'\t', то программа получит в качестве агрумента характер 0x09.
Это не так.

RawonaM

Цитата: myst от апреля 29, 2010, 17:46
Цитата: RawonaM от апреля 29, 2010, 17:27
Если написать $'\t', то программа получит в качестве агрумента характер 0x09.
Это не так.
А как?

myst

Цитата: Demetrius от апреля 29, 2010, 17:31
Где здесь логика — не знаю?
Логики нет. Команды — кто в лес кто по дрова. Юниксвей, блин. :wall: За стоко лет нормальный инструмент сделать не могут, помойка из костылей! >(

myst

Цитата: RawonaM от апреля 29, 2010, 17:49
Цитата: myst от апреля 29, 2010, 17:46
Цитата: RawonaM от апреля 29, 2010, 17:27
Если написать $'\t', то программа получит в качестве агрумента характер 0x09.
Это не так.
А как?
В кавычках, я же выше написал. Без кавычек TAB теряется во время разбора командной строки. И всё ведь это надо помнить! Идиотизм! :wall:

RawonaM

Цитата: Demetrius от апреля 29, 2010, 17:43
Основная проблема в том, что echo \t напечатает одну букву t. А sort -t \t с радостью скушает эту букву t как разделитель полей, и не выдаст сообщение о многозначном разделителе. Это антиинтуитивно! \t должна возвращать там!
Не понял что значит в этом предложении "многозначный разделитель".
В каком смысле она должна? Чтобы ввести таб, нужно ввести \ и после него таб. Не уверен, что коммандная строка это позволяет, проверьте. Слэш передает следующий карактер как есть, не понимаю какие у вас с этим проблемы. Ваше интуитивное понимание очень ограничит пользователя, по-моему.

Demetrius

Цитата: myst от апреля 29, 2010, 17:44
Цитата: Demetrius от апреля 29, 2010, 17:12
Интересно, во что оно превращается и что оно считает аргументом?  :???
В символ табуляции, естественно. Только этот символ съедается парсером командной строки.
Не-а! Опыты с echo показали, что превращается оно в обычный t!
Цитата: myst от
Цитата: RawonaM от апреля 29, 2010, 17:27
Если написать $'\t', то программа получит в качестве агрумента характер 0x09.
Это не так.
Так. Если, конечно, 0x09 — код таба. Кавычки тоже съедаются bash'ем, а самой программе передаётся табуляция «в чистом виде». Могу написать небольшую проверочную программу на сях, если не верите.

RawonaM

Цитата: myst от апреля 29, 2010, 17:50
Цитата: Demetrius от апреля 29, 2010, 17:31
Где здесь логика — не знаю?
Логики нет. Команды — кто в лес кто по дрова. Юниксвей, блин. :wall: За стоко лет нормальный инструмент сделать не могут, помойка из костылей! >(
По-моему ты просто не докурил доки. Инструмент практически идеальный. Парочку страниц сжатого объяснения и все становится на свои места.

RawonaM

Цитата: myst от апреля 29, 2010, 17:50
Цитата: RawonaM от апреля 29, 2010, 17:49
Цитата: myst от апреля 29, 2010, 17:46
Цитата: RawonaM от апреля 29, 2010, 17:27
Если написать $'\t', то программа получит в качестве агрумента характер 0x09.
Это не так.
А как?
В кавычках, я же выше написал. Без кавычек TAB теряется во время разбора командной строки. И всё ведь это надо помнить! Идиотизм! :wall:
По-моему ты ошибаешься.

myst

Цитата: Demetrius от апреля 29, 2010, 17:43
А sort -t \t с радостью скушает эту букву t как разделитель полей, и не выдаст сообщение о многозначном разделителе.
Нет, шелл превратит \t в символ табуляции.

myst

Цитата: RawonaM от апреля 29, 2010, 17:54
По-моему ты просто не докурил доки. Инструмент практически идеальный. Парочку страниц сжатого объяснения и все становится на свои места.
Под инструментом я здесь имею в виду, весь пучок «замечательно» подогнанных друг под друга и под задачи обработки текстов гнусных утилит.

RawonaM

Онлайн юниксовый bash для тестов: http://cb.vu/
Щас посмотрим.

myst

Цитата: RawonaM от апреля 29, 2010, 17:55
Цитата: myst от апреля 29, 2010, 17:50
Цитата: RawonaM от апреля 29, 2010, 17:49
Цитата: myst от апреля 29, 2010, 17:46
Цитата: RawonaM от апреля 29, 2010, 17:27
Если написать $'\t', то программа получит в качестве агрумента характер 0x09.
Это не так.
А как?
В кавычках, я же выше написал. Без кавычек TAB теряется во время разбора командной строки. И всё ведь это надо помнить! Идиотизм! :wall:
По-моему ты ошибаешься.
По-моему, ты сам не проверял, не так ли? ;)

myst

Цитата: RawonaM от апреля 29, 2010, 17:58
Онлайн юниксовый bash для тестов: http://cb.vu/
Щас посмотрим.
И как ты это собираешься узнать онлайн? :o

Demetrius

Цитата: RawonaM от апреля 29, 2010, 17:53
Ваше интуитивное понимание очень ограничит пользователя, по-моему.
Не ограничит. У буквы t нет специального значение, поэтому её экранирование всё равно никому в голову не придёт. \t должно возвращать либо \t, либо табуляцию.

Цитата: myst от апреля 29, 2010, 17:55
Цитата: Demetrius от апреля 29, 2010, 17:43
А sort -t \t с радостью скушает эту букву t как разделитель полей, и не выдаст сообщение о многозначном разделителе.
Нет, шелл превратит \t в символ табуляции.
Да нет же. Проверьте!

RawonaM

Цитата: Demetrius от апреля 29, 2010, 18:00
ЦитироватьВаше интуитивное понимание очень ограничит пользователя, по-моему.
Не ограничит. У буквы t нет специального значение, поэтому её экранирование всё равно никому в голову не придёт. \t должно возвращать либо \t, либо табуляцию.
А если у меня цикл и неизвестно, какой символ будет за слэшем?

RawonaM

Какой-то неправильный тот баш онлайн, приду домой потестирую.

Demetrius

Исходный файл:
BaytChingt500000tChina
JacktArat250000tIndonesia
CruellatLumpert725000tMalaysia


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

Файл res:
JacktArat250000tIndonesia
BaytChingt500000tChina
CruellatLumpert725000tMalaysia


Вывод: программа восприняла t как разделитель.

RawonaM

По-хорошему это все должно настраиваться параметрами. И они где-то есть, я вам почти гарантирую.

myst

Цитата: Demetrius от апреля 29, 2010, 17:43
Да нет же. Проверьте!
Я уже всё давным-давно проверил. Вы каким образом проверяли?

myst

А нет, я неправ. Действительно в t.

myst

Цитата: RawonaM от апреля 29, 2010, 18:04
По-хорошему это все должно настраиваться параметрами. И они где-то есть, я вам почти гарантирую.
Ты о чём?

RawonaM

Цитата: myst от апреля 29, 2010, 18:07
Цитата: RawonaM от апреля 29, 2010, 18:04
По-хорошему это все должно настраиваться параметрами. И они где-то есть, я вам почти гарантирую.
Ты о чём?
О поведении баша и что куда и как он передает.

myst

Цитата: RawonaM от апреля 29, 2010, 18:01
Цитата: Demetrius от апреля 29, 2010, 18:00
ЦитироватьВаше интуитивное понимание очень ограничит пользователя, по-моему.
Не ограничит. У буквы t нет специального значение, поэтому её экранирование всё равно никому в голову не придёт. \t должно возвращать либо \t, либо табуляцию.
А если у меня цикл и неизвестно, какой символ будет за слэшем?
Несколько раз прочитал, даже пытался представить.

Demetrius

Цитата: RawonaM от апреля 29, 2010, 18:01
А если у меня цикл и неизвестно, какой символ будет за слэшем?
Вместо экранирования первого символа всё равно будут нужны кавычки.
Я не представляю ситуацию, где нужно экранировать именно первый символ.

myst

Цитата: RawonaM от апреля 29, 2010, 18:08
Цитата: myst от апреля 29, 2010, 18:07
Цитата: RawonaM от апреля 29, 2010, 18:04
По-хорошему это все должно настраиваться параметрами. И они где-то есть, я вам почти гарантирую.
Ты о чём?
О поведении баша и что куда и как он передает.
Эскейпы настраиваются параметрами? Первый раз слышу.