Как использовать 'в псевдониме?

У меня есть одна строка, которую я хочу вызвать с помощью псевдонима.

while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"; do sleep 30; done

Я попытался сбежать ' как \' но это не сработало.

Каков правильный синтаксис для использования над одним слоем в псевдониме?

5 Solutions collect form web for “Как использовать 'в псевдониме?”

 alias my_du=$'while printf \'%s \' "$(df -P / | awk \'NR==2 { print $(NF-1) }\')"; do sleep 3; done' 

Вы можете проверить результат с помощью

 alias my_du 

Если $() цитируется как " вместо ' или « \ то она заменяется, и результат, а не предполагаемый вызов программы, становится частью определения псевдонима.

Вы не можете избежать одиночных кавычек, пока все еще в одинарных кавычках, потому что \ принимается буквально в одном контексте кавычек. Либо закрывайте одинарные кавычки перед побегом, либо, лучше, используйте двойные кавычки.

 alias my_du="while printf '%s ' \"\$(df -P / | awk 'NR==2 { print \$(NF-1) }')\"; do sleep 30; done" 

Хотя это можно уговорить в псевдоним, функции обычно предпочтительны. От man bash :

Для почти всех целей псевдонимы заменяются функциями оболочки.

Ваш псевдоним в форме функции:

 my_du() { while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')" do sleep 30 done } 

Это более читаемо и, как таковое, более удобно.

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

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

 alias foo='while printf '\''%s '\'' "$(df -P / | awk '\''NR==2 { print $(NF-1) }'\'')"; do sleep 30; done' 

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

 foo () { while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"; do sleep 30; done } 

Если вам нужны команды, которые принимают аргументы или каким-либо образом взаимодействуют со своей средой, используйте функции. По крайней мере, в bash, псевдонимы расширяются, когда они определены, они могут действовать так, как если бы они принимали аргументы или используемые переменные. Иногда. Закон Мерфи гарантирует, что это не будет работать, когда это действительно необходимо.

  • Прикрепить файлы для отправки почты, которые являются результатом набора команды find
  • Как работает опция -d для чтения bash?
  • Как я могу манипулировать подкаталогами в оболочке?
  • Как использовать переменную для строки кода скрипта?
  • Как разрешить запуск сценария кем угодно в любом месте
  • Функциональность Copytruncate без использования logrotate
  • Цветной вывод из сценария Bash
  • Является ли `bash --posix` необходимым для bash 4, когда передается опция` set` для подсетей?
  • используя переменную «файл», полученную из «for» файла «in», и перейти к другому скрипту не удалось
  • Загрузите другой .bashrc при запуске консоли или термина из командной строки
  • Простой «переменный» файл Bash
  • Linux и Unix - лучшая ОС в мире.