Bash: одинарные и двойные кавычки и восклицательный знак - PullRequest
2 голосов
/ 16 мая 2011

У меня есть простой скрипт с именем example:

#!/bin/sh
echo $'${1}'

Обратите внимание, что здесь используется $'' для преобразования \n в новую строку. ${1} - это первый параметр, переданный этому сценарию оболочки.

Я хочу передать параметр этому сценарию example, и он напечатает следующее:

#1. You're smart!
#2. It's a difficult question!

Я попробовал следующее:

example "#1. You're smart!\n#2. It's a difficult question!"

Ошибка: -bash: !\n#2.: event not found

Затем я попытался уйти ! по одинарной кавычке и попытался:

example '#1. You're smart\!\n#2. It's a difficult question\!'

Выводит:

${1}

Есть здесь какое-нибудь решение? Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 16 мая 2011
$ cat t.sh
#! /bin/bash
echo -e $@

Или echo -e $1 или echo -e ${1}, если вы просто хотите обработать первый аргумент.

Чтобы bash прекратил попытки расширения !, используйте set +H (см. В bash, как мне избежать восклицательного знака? )

$ set +H
$ ./t.sh "#1. You're smart!\n#2. It's a difficult question!"
#1. You're smart!
#2. It's a difficult question!
2 голосов
/ 16 мая 2011

То, что находится внутри $'' выражения, должно быть буквальным. Вы не можете раскрыть другие переменные внутри него.

Но вы можете сделать это:

echo "${1//\\n/$'\n'}"

У Яна Худека есть еще лучший ответ:

echo -e "$1"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...