Лучше объяснить на примере. Я пишу простую оболочку (функция в моем .bashrc) вокруг почтовой команды.
Вот моя текущая функция, которая работает неправильно:
function email_me() { echo "$@" | mail -s "\"$@\"" [email protected]; }
Вот мое желаемое использование - это отправит электронное письмо с темой и телом, установленным на testing 1 2 3
. Обратите внимание, что я специально не хочу ставить кавычки вручную.
~$ email_me testing 1 2 3
Таким образом, я хочу, чтобы замена строки происходила следующим образом:
echo "testing 1 2 3" | mail -s "testing 1 2 3" [email protected]
Однако, что бы я ни пытался, аргумент -s не заключен в кавычки, и электронное письмо с темой "testing
отправляется следующим получателям: 1, 2, 3 и [email protected].
Как я могу заставить аргумент -s считать «тестирование 1 2 3» одной строкой?
"\"$@\""
не работает:$@
в двойных кавычках расширяется до"$1" "$2"
... с разделенными словами, а\"
— буквальная кавычка, так что в итоге вы получите"\"$1"
в качестве первого слова,"$2"
в качестве второго слова, ..."$N\""
в качестве последнего слова. Прочтите gnu.org/software/bash/manual/bash.html. для получения подробной информации о расширении. - person 4ae1e1   schedule 18.11.2015$@
на$*
, и ваша функция должна работать как положено. Не нужно для экранированных кавычек\"
- person alvits   schedule 19.11.2015IFS
является пробелом). Я временно был в замешательстве. - person 4ae1e1   schedule 19.11.2015function email_me() { echo "$@" | mail -s "$*" [email protected]; }
- person alvits   schedule 19.11.2015