LINUX.ORG.RU

Допустимы ли символы & и | в аргументах программы?

 , , ,


0

2

Если я буду использовать в аргументах командной строки своей программы символы & (как логическое И) и | (как логическое ИЛИ) - это создаст какие-либо проблемы при использовании в linux?

Ответ на: комментарий от sin_a

придётся параметры заключать в кавычки

Или бэк-слэшить. Я просто думал - а какие, собственно, безгеморройные альтернативы существуют? И сходу как-то ничего не придумалось…

bugfixer ★★★★
()
Последнее исправление: bugfixer (всего исправлений: 2)
Ответ на: комментарий от cobold

То есть даже просто открыть Konsole и скомандовать progname arg1 & arg2 & arg3 не получится, придётся экранировать? Эх блин, я думал, шелл берёт нулевой аргумент (название проги) и передаёт ей управление, и что там дальше в команде - его уже не колышет.

alex1101
() автор топика
Ответ на: комментарий от alex1101

Эх блин, я думал

Чует мое сердце - ждёт Вас много открытий чудных ;) Настоящая развлекуха начинается когда нужно удалённо через несколько hoops команды сабмитить, там и \\ и \\\\ и даже \\\\\\\\ не редкость ;)

ПыСы: спешу заметить - ЛОР половину моих backslashes съел ;) Хозяйке на заметку.

bugfixer ★★★★
()
Ответ на: комментарий от alex1101

progname arg1 and arg2 and arg3 or arg4 <= ипольбуй воэта
progname arg1 и arg2 и arg3 или arg4
progname "arg1 & arg2 & arg3 | arg4"
progname 'arg1 & arg2 & arg3 | arg4'

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

cat myargs | progname

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 3)
Ответ на: комментарий от x905

Когда

progname arg1 arg2 arg3

программа выводит результаты, которые удовлетворяют хотя бы одному из arg, а когда

progname arg1 & arg2 & arg3

программа выводит результаты, которые удовлетворяют всем arg вместе.

alex1101
() автор топика
Ответ на: комментарий от alex1101

я думал, шелл берёт нулевой аргумент (название проги) и передаёт ей управление

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

goingUp ★★★★★
()
Ответ на: комментарий от alex1101

Ну тогда можно разбить запрос на две фиксированные части, сначала идёт список аргументов через пробел, подразумевая что обязательные параметры запроса, затем идёт любой допустимый разделитель, да хоть запятая и всё что за ней включая тоже список разделённых пробелом это список или. Но опять же можно просто обернуть то что ты хочешь в кавычки целиком и всё. А уж там в программе разберёшь аргумент. Очень часто приходится программам кавычки делать. Либо муторно пердолить и экранировать отдельные символы либо в кавычки обернуть, второе вполне себе удобно. Или возми два других символа которые можно использовать, например косую черту в качестве «или», а в качестве «и» просто пробелы оставь или наоборот

locate word1/word2 world3 найти всё где есть world3 и word1 или word2

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от alex1101

Если прям наглядно надо чтобы было то типа такого

locate world3+world4+world5 word1/word2/worldX

Типа у тебя сразу две группы, группа ИЛИ и группа И, найти все слова что идут через + и что-то из из того что идёт через / ну или типа, просто в файлике поиграть с вариантами и выбрать что понравится, запятую там, знак подчёркивания, тире,

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от alex1101

progname arg1 arg2 arg3

Программа получает аргументы. А чему удовлетворять и что выводить она решает внутри сама.

Фактически у тебя, в первом случае - три аргумента, во втором случае - пять. Пусть при трех аргументах выполняет «или», при четырех - «и».

andytux ★★★★★
()
Ответ на: комментарий от alex1101

Тут неплохо бы изучить, как другие подобные продукты принимают запрос с командной строки. Find там, recoll, notmuch, tracker. Подумать, стоит ли ввязываться.

akho
()