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

Я пробовал множество способов распечатать эту строку в скрипте:

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

Все они имеют разные проблемы.

Последнее, что я пробовал (и помню!):

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

но он не работает, он многократно печатает каталог PATH и перед alias myname имеет %sn

(Я предпочитаю использовать printf)

2 Solutions collect form web for “попытка избежать цитат”

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

 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 принимает только один аргумент формата, а затем список значений).

Существует два простых решения. Один заключается в том, чтобы использовать здесь документ вместо меток кавычек. Используйте цитированную форму документа здесь (где <<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 работает тоже, потому что единственные расширения, которые он выполняет, касаются обратных косых черт и ведущих.

  • Выбирать столбцы из файла csv переменной длины
  • Почему используется && в 75 раз быстрее, чем если ... fi и как сделать код более понятным
  • Как запустить команду только после того, как предыдущая команда не удалась в bash?
  • Shell Scripting: вычислить мощность числа с реальным числом в качестве показателя
  • Как навалом сжимать разные подпапки?
  • checkbashisms-совместимый способ определения текущей оболочки
  • Как добавить число слов в файл без добавления общего количества
  • Скрипт сопоставляет буквенный шаблон по нескольким строкам?
  • Как вызвать функции Matlab в bash, когда пользовательский ввод является операндом
  • Добавить путь к $ PATH, если он еще не был в $ PATH
  • Как избежать ряда подстановочных знаков в сценарии оболочки unix?
  • Interesting Posts

    ESET NOD32 esets_daemon syslog flood

    Последовательная связь WvDial не работает с uart / dev / ttySAC4, но работает с `screen`

    Установка vim / emacs на solaris 8

    Большое количество трафика на простоях cifs mount

    Проблемы с Wirless-адаптером в BackTrack 5 R3

    Что происходит при отправке SIGKILL в Zombie Process в Linux?

    Как установить путь к использованию приложений OSX

    Swap: лучше создать выделенный раздел подкачки или создать файл подкачки?

    Обработка ошибок сценария оболочки при назначении переменной STDOUT переменной

    Настройте xfreerdp, чтобы всегда передавать некоторые параметры

    проблема при входе в систему по умолчанию / bin / fish shell в gdm

    Прозрачность панели MATE

    Почему пользователь root имеет контроль над каталогами mysql, но не отображается как член группы mysql?

    С точки зрения безопасности я должен добавить своего пользователя в файл sudoers или нет?

    Пошаговое резервное копирование FTP на локальный компьютер

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