Допустим, у меня есть следующее в моем .bashrc

test1() { echo $@; }

и я хочу, чтобы в моем терминале было запущено следующее

test1 1 and (2 and 3)

который должен выводить

1 and (2 and 3)

Но это просто дает мне синтаксическую ошибку из-за скобок. Есть ли способ исправить это, кроме использования

test1 "1 and (2 and 3)"

? Может быть, с первой заменой всех специальных символов (как скобки)?

3 ответа3

0

Не совсем понятно, какова ваша цель.  Учитывая это, это может быть то, что вы хотите:

(shell prompt)$ test1() { printf "data? "; read -r tdata && printf "%s\n" "$tdata"; }
(shell prompt)$ 
(shell prompt)$ test1
data? 1 and (2 and 3)           (You type the part in bold.)
1 and (2 and 3)                 (Your test1 function repeats your input back to you.)
(shell prompt)$ 
0

Вы можете удалить специальное значение скобок, используя обратную косую черту:

test1 1 and \(2 and 3\)

Или процитируйте текст в квадратных скобках:

test1 1 and "(2 and 3)"
0
test1 "1 and (2 and 3)"

... даст вам ожидаемый результат.

Ссылка:http://www.tldp.org/LDP/abs/html/abs-guide.html -> "Раковины"

То, что находится внутри без кавычек в bash, запускается как подоболочка, параллельно с запущенной в данный момент оболочкой.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .