Я считаю, что то, что вы ищете, является гибким регулярным выражением, которое будет соответствовать единственному токену оболочки, содержат цитаты или другие подобные осложнения.
Обратите внимание, что символы, которые автоматически завершают токены, являются следующими: ();<>&|
и пробелы. (Руководство bash
говорит space
и tab
, но я уверен, что newline
также отдельные слова.)
Такое регулярное выражение возможно, но (imho) оно малопригодно, отчасти потому, что оно не принимает кавычки (или брекетинг: a$(echo foo)b
- это одно слово), а отчасти потому, что результирующее слово должно быть rescanned для escape-символов. Но что угодно. Вот пример гибкое регулярное выражение:
([^();<>&|\\[:space:]]|\\(.|\n))+
Это соответствует любому количеству последовательных экземпляров:
- ничего, кроме метасимвола или экранирующего символа, или
- символа экранирования следует любому одиночному символ , или
- escape-символ, за которым следует новая строка.
Обратите внимание, что существует разница между 'echo 123 \
chepner
Я перенаправил 123 \
Lamian