попытка избежать кавычек

Забудьте о цитировании и поместите текст в переменную окружения.

Используйте -x для запуска оболочки.

Не создавайте код для $SHELL: вы не знаете, какой синтаксис он понимает. Выполните код в sh и вызовите $SHELL для вызова интерактивной оболочки.

message='HelloWorld' gnome-terminal -x sh -c 'printf %s\\n "$message"; unset message; exec "$SHELL"'
0
03.08.2016, 02:07
2 ответа

Если я правильно понял вопрос, вы пытаетесь добавить строку

alias myname='export PATH="/path/to/bin:$PATH"'

в свой ~ / .bashrc файл

Очевидный тип echo завершится ошибкой, потому что $ PATH раскрывается в неправильное время.

Вместо этого нам нужно смешать цитаты:

echo "alias myname='export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

Теперь вы говорите, что по какой-то причине хотите использовать printf .Итак, мы можем сделать то же самое:

printf "%s\n" "alias myname='export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

Если вы хотите рассматривать две стороны = как отдельные строки:

printf "%s=%s\n" "alias myname" "'export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

И так далее.

( printf принимает только один аргумент формата, а затем список значений).

1
29.04.2021, 00:11

Есть два простых решения. Один из них - использовать здесь документ вместо кавычек.Используйте цитированную форму документа здесь (где часть << EOF содержит символ кавычек), чтобы отключить подстановку переменных и команд внутри документа здесь.

cat <<\EOF >>~/.bashrc
alias myname='export PATH="/path/to/bin:$PATH"'
EOF

Другой - использовать одинарные кавычки вокруг строки, которую вы хотите напечатать. Вы можете эффективно экранировать одинарную кавычку в одинарном кавычках, используя '\' ' - конец одинарного кавычки, добавление одинарной кавычки и начало нового одинарного кавычки.

echo 'alias myname='\''export PATH="/path/to/bin:$PATH"'\'''

(Вы можете оптимизировать последний пустой строковый литерал '' .)

В некоторых оболочках команда echo не выводит свой аргумент буквально, поэтому надежный способ распечатать строку - использовать printf :

printf '%s\n' 'alias myname='\''export PATH="/path/to/bin:$PATH"'\'''

В этом конкретном случае echo также работает, поскольку единственные расширения, которые он выполняет, касаются обратной косой черты и ведущего - ].

1
29.04.2021, 00:11

Теги

Похожие вопросы