gpt4 book ai didi

bash - 为什么 alias foo1 ="echo $1"和 alias foo2 ="echo ' $ 1'"表现得像他们一样?

转载 作者:行者123 更新时间:2023-11-29 09:17:00 28 4
gpt4 key购买 nike

在我的 .bashrc 文件中,我放入了以下两行:

alias foo1="echo $1"
alias foo2="echo '$1'"

然后,在终端中,我得到以下输出:

$ foo1 hello world
hello world
$ foo2 hello world
hello world

为什么foo2会产生额外的空间?

如果我只是在终端中执行以下操作,输出如下所示:

$ echo hello world
hello world
$ echo 'hello world'
hello world

这让我认为 foo1foo2 应该做完全相同的事情。为什么它们实际上没有输出完全相同的东西,为什么它们只相差一个空格字符?

(此外,为什么它们中的任何一个都输出 world?我希望只输出第一个参数。)

最佳答案

如果在典型的交互式 shell 中运行:

$ set --             # this clears the argument list; it's empty by default, but make sure.
$ alias foo1="echo $1"
$ alias foo2="echo '$1'"
$ alias -p

alias -p的输出如下:

$ alias -p
alias foo1='echo '
alias foo2='echo '\'''\'''

值得注意的是,$1 根本不存在——因为您在双引号字符串中定义了别名,它们被替换为 $1 的当前值-- 当前 shell 上下文中存在的值,对于交互式 shell,它在启动时将为空。


因此,当你运行时:

foo2 hello world

...shell 调用的是:

echo '' hello world

因为 echo 在其参数之间放置了空格,所以打印如下:

 hello world

然而,如果你运行:

foo1 hello world

...shell 调用的是:

echo hello world

...因为,正如您在 alias -p 发出的 foo1 别名中看到的,没有未引用的 $1 的记录> 离开;它在定义时被替换为当前值——一个空字符串。

关于bash - 为什么 alias foo1 ="echo $1"和 alias foo2 ="echo ' $ 1'"表现得像他们一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51028365/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com