我正在尝试在 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
用 bash 运行它:
bash test.sh
看到错误,您似乎实际上是在用破折号运行它:
> dash test.sh
test.sh: 5: test.sh: Syntax error: "(" unexpected
只有这一次您可能使用了它的链接(/bin/sh -> /bin/dash)。
在 BASH 4+ 中,您可以使用以下内容声明一个空数组:
declare -a ARRAY_NAME=()
然后,您可以通过以下方式附加新项目 NEW_ITEM1 和 NEW_ITEM2:
ARRAY_NAME+=(NEW_ITEM1)
ARRAY_NAME+=(NEW_ITEM2)
请注意,添加新项目时需要括号 ()。这是必需的,以便将新项目作为 Array 元素附加。如果您确实错过了 (),NEW_ITEM2 将成为附加到第一个数组元素 ARRAY_NAME[0] 的字符串。
上面的示例将导致:
echo ${ARRAY_NAME[@]}
NEW_ITEM1 NEW_ITEM2
echo ${ARRAY_NAME[0]}
NEW_ITEM1
echo ${ARRAY_NAME[1]}
NEW_ITEM2
接下来,如果您执行了(注意缺少的括号):
ARRAY_NAME+=NEW_ITEM3
这将导致:
echo ${ARRAY_NAME[@]}
NEW_ITEM1NEW_ITEM3 NEW_ITEM2
echo ${ARRAY_NAME[0]}
NEW_ITEM1NEW_ITEM3
echo ${ARRAY_NAME[1]}
NEW_ITEM2
感谢@LenW 纠正我的附加操作。
试试这个,看看你是否倾向于 dash 或 bash
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 并且您的数组将工作。
如果数组为空,请执行以下操作:
NEWLIST=
您可以通过以下方式进行检查:
if [ $NEWLIST ] ; then
# do something
fi
非空数组声明如下所示:
NEWLIST=('1' '2' '3')
在过程中填充数组:
ARRAY=("$(find . -name '*.mp3')")
希望这可以帮助