如何在Shell中多行定义数组

84

在shell脚本文件中,是否可以在多行中定义一个数组?我尝试了像这样的写法:

foo.sh

#!/usr/bin/env bash

messages=(
    "Hello"
    "World"
)

echo $messages

然而,输出结果只有第一行“Hello”,没有第二行“Word”。

$ sh foo.sh
Hello
更让我困惑的是,如果我将foo.sh的内容复制并直接粘贴到终端中,事情会按照我预期的方式进行:
$ messages=(
    "Hello"
    "World"
)

echo $messages
Hello World

有人知道为什么吗?


因为您的终端不是 sh - Mad Physicist
将您的脚本设置为可执行文件,然后使用 ./foo.sh 直接运行它,这样应该会产生相同的结果。 - Mad Physicist
@MadPhysicist,感谢您的评论!我尝试了chmod + x foo.sh,然后执行./foo.sh,结果是一样的:只有“Hello”,没有“World”。您还有其他想法吗? - Yuchen
7
如果你使用的交互式shell是bash,你可以使用“declare -p messages”命令来查看你创建的数组结构,以确定你遇到的问题是在分配还是显示数组内容方面。你也可以尝试将该命令放入脚本中,以查看会发生什么。请注意,在bash中,如果要打印所有数组元素,“printf '%s ' "${messages[@]}"”是一个可行的方法。只运行“echo $messages”等同于“echo ${messages[0]}”,这只会给你第一个数组元素。 - ghoti
1
@ghoti,“echo $messages”等同于“echo ${messages[0]}”=>这正是问题所在,非常感谢您的帮助! - Yuchen
1个回答

70
如果您想打印整个数组,您需要:
echo ${messages[@]}

7
${messages[*]} 也可以用来访问整个数组。如果索引号为 @ 或 *,则所有数组成员都将被引用,如 guide 所述。 - 0x4a6f4672

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接