多行bash别名运行不正常

多行bash别名运行不正常,bash,alias,Bash,Alias,我试图编写一个多行别名,但执行顺序有点偏离。我的别名看起来是这样的: alias test_alias=" echo one echo two echo three echo four echo five " 当我运行别名时,我得到以下输出: $ test_alias two three four five one 我做错什么了吗?如何获得预期的有序输出 以下是一些bash信息: $ echo $BASH_VERSION 3.2.57(1)-release 对于我的用例,函数似乎是一种更好

我试图编写一个多行别名,但执行顺序有点偏离。我的别名看起来是这样的:

alias test_alias="
echo one
echo two
echo three
echo four
echo five
"
当我运行别名时,我得到以下输出:

$ test_alias
two
three
four
five
one
我做错什么了吗?如何获得预期的有序输出

以下是一些bash信息:

$ echo $BASH_VERSION
3.2.57(1)-release

对于我的用例,函数似乎是一种更好的方法:

function test_func() {
    echo one
    echo two
    echo three
    echo four
    echo five
}
运行该函数:

$ test_func
one
two
three
four
five
如果我确实想保留别名,看起来我只需要将右引号移到最后一行的末尾:

alias test_alias="
echo one
echo two
echo three
echo four
echo five"

我无法用
bash
zsh
再现这一点。但正如@melpomene所说,函数比别名更可取。奇怪。你能运行
bash--norc
得到一个干净的shell,再试一次,然后复制粘贴整个终端转录本吗?我很难想象,如果不在后台运行一个实现来覆盖
echo
,这会发生什么,或者将stdout重定向到一些非常不寻常的东西……并不是说任何人都应该使用多行别名;它们可能提供的任何用例都可以通过函数更好地实现。@JohnnyMetz,细节,特别是“随机的东西”,很重要(如果我们真的想找到一个解释,而不仅仅是手头行为的解决方法)。也就是说:不要描述它,展示它。顺便说一句,使用
test_func(){
(POSIX标准化语法)或
function test_func{
(遗留ksh语法)都是很好的形式。混合了
function
关键字和
()
s既不与POSIX sh兼容,也不与旧版ksh兼容,因此这是两个世界中最糟糕的一个;另请参见我的否决票;别名的更改应该不会产生任何影响,而切换到函数(尽管是推荐的)不应该对报告的问题产生影响(没有人可以重现)。这不是答案。@chepner:我也考虑过投反对票,但决定不投。这个答案并没有解释最初的问题是什么,但它确实显示了一个可行的解决方案(使用函数)。请参阅问题正文中的“如何获得预期的有序输出?”。(但我还是想在问题中看到更多的信息,特别是评论中提到的“一堆其他随机的东西”)。不过,这个答案对其他任何人都没有用处,因为它不能解决“真正”的问题。这个问题应该以“无法复制”结束,未回答。@chepner将双引号移到最后一行的末尾,而不是移到自己的行,解决了问题;但是,函数是这里的最佳解决方案