Как заставить код интерпретировать $ но нет *? [закрыто]

Es feo, pero lo uso en sistemas más antiguos con solo sh disponible como hosts ESXi:

cat `printf %s $HISTFILE`
-1
24.04.2019, 07:23
1 ответ

Это единственный случай, когда я предлагаю использовать псевдонимы bash, а не функции. В руководстве bash написано For almost every purpose, aliases are superseded by shell functions, это исключение.

Обычно, если вы скажете

 perl script *.txt

, то оболочка расширит *.txt. Это можно отключить с помощью «set +f». Проблема с использованием функции заключается в том, что к моменту вызова функции оболочка уже расширила шаблон, поэтому хитрость заключается в использовании комбинации псевдонима и функции.

alias script="set +f ; _script"
_script(){ set -f ; perl script "$@" ; }

Затем бег

 script *.txt

будет обрабатываться как "set +f ; _script *.txt", поэтому расширение шаблона отключается до вызова функции скрипта _.Функция снова включает раскрытие шаблона, а затем вызывает сценарий perl.

Другой способ избежать этой проблемы — использовать кавычки оболочки и сказать

  perl script '*.txt'

и кавычки предотвратят расширение шаблона оболочкой.

2
28.01.2020, 05:07

Теги

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