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

时间:2013-09-20 16:17:37

标签: arrays bash shell

我试图在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

5 个答案:

答案 0 :(得分:10)

用bash运行它:

bash test.sh

看到错误,似乎你实际上是用破折号运行它:

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

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

答案 1 :(得分:7)

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

declare -a <name of array>

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

答案 2 :(得分: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,您的数组将正常工作。

答案 3 :(得分:0)

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

declare -a ARRAY_NAME=()

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

ARRAY_NAME+=NEW_ITEM

答案 4 :(得分:-2)

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

NEWLIST=

您可以查看:

if [ $NEWLIST ] ; then
   # do something
fi

非空数组声明如下所示:

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

在处理过程中填充数组:

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

希望这有帮助