Shell脚本:声明空数组的正确方法

问题描述 投票:23回答:5

我试图在Shell脚本中声明一个空数组,但我遇到了错误。

#!/bin/bash

list=$@

newlist=()

for l in $list; do

        newlist+=($l)

done

echo "new"
echo $newlist

当我执行它时,我得到test.sh: 5: test.sh: Syntax error: "(" unexpected

arrays bash shell
5个回答
10
投票

用bash运行它:

bash test.sh

看到错误,似乎你真的用破折号运行它:

> dash test.sh
test.sh: 5: test.sh: Syntax error: "(" unexpected

只有这次你可能使用了它的链接(/ bin / sh - > / bin / dash)。


7
投票

我发现以下语法更具可读性。

declare -a <name of array>

有关更多详细信息,请参阅Bash Guide for Beginners: 10.2. Array variables


1
投票

试试看你是否面向短划线或猛击

ls -al /bin/sh

如果它说/bin/sh -> /bin/dash,那么键入:

sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh

然后再次输入:

ls -al /bin/sh*

然后必须说出这样的话:

/bin/sh -> /bin/bash

这意味着现在sh正确地面向Bash,你的阵列将起作用。


0
投票

在BASH 4+中,您可以使用以下命令声明一个空数组:

declare -a ARRAY_NAME=()

然后,您可以通过以下方式追加新项目:

ARRAY_NAME+=NEW_ITEM

-2
投票

如果数组为空,只需执行以下操作:

NEWLIST=

您可以查看:

if [ $NEWLIST ] ; then
   # do something
fi

非空数组声明如下所示:

NEWLIST=('1' '2' '3')

在处理过程中填充数组:

ARRAY=("$(find . -name '*.mp3')")

希望这可以帮助

© www.soinside.com 2019 - 2024. All rights reserved.