别名未按预期工作

别名未按预期工作

我正在努力文件类型使用别名。我正在使用:

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
.....

我该怎么做才能使该命令成为别名。

答案1

$1这是因为在定义别名时,外部双引号允许由 shell 进行评估,因此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/\.([^.\/]+)$/

然而对于这种情况,我建议使用 shell 函数代替别名 - 例如参见在 Bash 中,何时使用别名,何时使用脚本,何时编写函数?

相关内容