~/.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
。
壳
我正在bash
Debian 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。