我在 ~/.bash_aliases 中自己的别名做错了什么?

我在 ~/.bash_aliases 中自己的别名做错了什么?

~/.bashrc

我的~/.bashrc包含以下内容(默认情况下):

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

~/.bash_aliases

我的~/.bash_aliases包含以下内容(我的定义):

alias define="curl dict://dict.org/d:$1"

期待

其中define有别名,因此我可以直接在我的 shell(终端)中使用类似以下内容的内容:

define internet

虽然我希望它能够查看 dict.org 并查找互联网的定义并将其显示给我。

由于某种原因,每当我运行它时我得到以下内容(托管在paste.debian.net上,可能会及时消失)。


~/.bash_aliases我尝试在会议中寻找来源bash


我正在bashDebian Bullseye 上运行版本 5.0.11(当前正在测试,并计划即将发布主要版本)。


我自己的别名做错了什么~/.bash_aliases

答案1

问题在于别名不像脚本或函数那样采用位置参数。另外,bashrc 中的别名用双引号引起来,因此参数会立即扩展(变为空)。所以你的别名本质上被设置为:

alias define="curl dict://dict.org/d:"

即使您使用单引号正确转义了参数,否则\您仍然不会按照您的想法传递参数。

define foo例如会导致curl dict://dict.org/d: foo,要以这种方式使用它,您需要使用 set 将参数设置为 shell 参数:

set -- foo; define

然而,当需要参数/选项时,函数绝对是最佳选择:

define () {
    local word=$1
    curl "dict://dict.org/d:$word"
}

答案2

别名不是这样工作的。

功能比较强大,可以使用:

function define(){
  curl "dict://dict.org/d:$1"
}

$1, 是脚本或函数的参数 1。

相关内容