Bash: разрешить круглые скобки в аргументах команды (т.е. предотвратить «неожиданный токен» (‘”)

Я часто использую программу командной строки, которую я предоставляю с аргументами, содержащими скобки. Для простоты, скажем, я пишу

echo 'bar(1,3)'

Я хотел бы опустить цитаты. Однако, если я это сделаю, я получу syntax errror near unexpected token '(' . Я думаю, это связано с подshellми. Я хочу отключить их, если это единственный способ. (Хотя подshell не может быть запущена, если она не находится в начало команды в любом случае, поэтому они не являются основанием для запрета скобок в аргументах, насколько я могу судить)

    One Solution collect form web for “Bash: разрешить круглые скобки в аргументах команды (т.е. предотвратить «неожиданный токен» (‘”)”

    ( и ) являются специальными символами-токенами в синтаксисе bash , которые используются в ряде операторов, включая:

    • (...) подshell
    • func() compound-command
    • $(...) подстановка команд
    • < (...) , >(...) процесс подстановки
    • ((...)) конструкция арифметической оценки
    • $((...)) арифметическое разложение
    • a=(...) , a+=(...) операторы присваивания массива
    • операторы @(...) , +(...) , *(...) ,? ?(...) (с extglob)
    • [[ (a && b) || (c && d) ]] [[ (a && b) || (c && d) ]] группировка операторов условных выражений
    • [[ ... =~ ...(...)... ]] оператор регулярного выражения.

    echo a=(b) - синтаксическая ошибка, но не export a=(b) .

    echo a) является синтаксической ошибкой, если не было открытия ( в предыдущих строках часть одной из конструкций выше).

    Хотя может быть возможным написать ловушку readline, которая добавляет кавычки, где это необходимо, вокруг ( , ) чтобы избежать синтаксической ошибки, это будет значительным усилием, поскольку это будет означать полный синтаксический анализ синтаксиса оболочки.

    Лучшим подходом может быть использование ярлыка, который цитирует текущее слово, когда вы слишком поздно понимаете, что оно содержит специальные символы для оболочки.

    С zsh (в режиме emacs ):

     bindkey -s '\e#' '\C@\eb\Cx\Cx\e"' 

    Чтобы Alt + # цитировал текущее слово .

    Или приближение с помощью bash (также в предположении режима emacs ):

     bind "\"\e#\": \"'\e \eb'\CX\CX\"" 
    Interesting Posts

    Начальное название вкладки и автоматическое ее обновление в xfce4-терминале

    Изменение пароля в нескольких блоках с использованием скрипта

    KEY System Tray Organizer

    Как восстановить /etc/apt/trustdb.gpg на Debian?

    Инструмент мониторинга без веб-интерфейса

    Опции ps помогают, как сообщить об усеченном списке процессов, отсортированных по нужным столбцам

    Конфигурирование конфигурации отображения GNOME / Wayland из командной строки

    Существует ли корреляция между версиями CentOS и RHEL?

    Как я могу перенаправить порты 80 и 443 на 8080 и 8443 с помощью iptables?

    Клуб вместе N последовательных строк в оболочке?

    установка tmux на Ubuntu 8.04

    Установите Ghostscript v 9.05 (или новее) на CentOS

    Как создать базовый встроенный linux на маршрутизаторе Qualcomm?

    Как найти активный сетевой интерфейс из пользовательского пространства?

    Почему мои виртуальные машины Windows теперь дают мне NS_ERROR_FAILURE при запуске, так как я обновил VirtualBox до 5.1.20?

    Linux и Unix - лучшая ОС в мире.