псевдоним не работает должным образом

, я пытаюсь получить типы файлов , используя псевдоним. Я использую:

alias file-types="find . -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u"

Однако это не работает:

Когда я набираю команду в терминале, она показывает (это именно то, что я хочу):

azw
azw3
bz2
chm
epub
pdf

но когда я использую псевдоним, он показывает что-то вроде :

./x.epub
./y.pdf
./z.pdf
.....

Что я могу сделать, чтобы сделать эту команду псевдонимом.

0
задан 15 July 2021 в 14:50

1 ответ

Это потому, что внешние двойные кавычки позволяют $1 быть оцененным оболочкой, когда псевдоним определен, так что print $1 становится обычным print :

$ alias file-types="find . -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u"
$ alias file-types
alias file-types='find . -type f | perl -ne '\''print  if m/\.([^.\/]+)$/'\'' | sort -u'

Вероятно, самый простой способ исправить цитирование - это сделать обратный слеш-эскейп $:

print \$1 if m/\.([^.\/]+)$/

однако я бы рекомендовал использовать функцию оболочки вместо псевдонима в подобных случаях - см. например В Bash, когда использовать псевдоним, когда скрипт, а когда писать функцию?

3
ответ дан 28 July 2021 в 11:18

Другие вопросы по тегам:

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