【发布时间】:2012-11-15 11:19:09
【问题描述】:
我有一个示例脚本“array-test.sh”,它将三个函数聚合到一个数组中:
[user@host ~]$ cat array-test.sh
#!/usr/bin/env bash
function1() {
printf '%s\n\n\n' "cat"
}
function2() {
printf '%s\n\n\n' "dog"
}
function3() {
printf '%s\n\n\n' "mouse"
}
for function in\
function1\
function2\
function3; do
array[$((index++))]=$($function)
done
echo "${array[@]}"
[user@host ~]$ ./array-test.sh
cat dog mouse
[user@host ~]$
但是,缺少换行符。是什么导致了这种行为?
【问题讨论】:
-
我相信
$()的行为类似于反引号运算符。 -
你为什么要发布这么复杂的代码?您可以使用
echo "$(function1)"重现该问题 -
@KarolyHorvath:因为这是问题的本质,通常是最难解决的问题。您(声称)立即看到它的事实仅证明您比 OP 更习惯 bash 的怪癖。你为什么不通过给出一个答案而不是一个有问题的评论来炫耀你的优势?
-
@Rody Oldenhuis:请注意你的举止,你刚刚发表了粗鲁的评论。我想我没有问什么特别的。在 SO,我们希望人们提出简约的示例。我认为检查
var=$(function)是很自然的,然后下一步就是直接与echo一起使用它。 -
@KarolyHorvath:请不要感到被冒犯;我刚刚指出对您而言,这种认识是自然而然的,但对 OP 来说可能不是。他可能将一个巨大但没有功能的代码块减少到上面的行中,他认为这是最小的。事实证明,它不是。我还指出,“在这里”,我们感谢人们以实际 answers 的形式给出答案,并且仅使用 cmets 来获取有关问题的更多详细信息或澄清某些事情,而不是像这样的快速陈述你开始了。