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

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

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

  • Как задать вопросы с помощью сценария bash и сделать их переменной?
  • Сравните путь с домашним пользователем и определите, является ли первый каталог «.nvm»
  • Невозможно войти в centOS с любым пользователем
  • Как напечатать уникальное имя в UNIX с помощью команды
  • Как обрабатывать ряд парных файлов
  • CSV-копия не копирует 5 файлов из 4000+
  • У меня есть многострочная строка, которую мне нужно перебрать, но я не использую bash. Совет?
  • 7z не исключает каталоги из файла исключений
  • Найти шаблон между специальными символами
  • case + как реализовать равный или меньше или больше в случае синтаксиса
  • Confused для пользователя и su в linux
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.