如何在shell脚本中操作数组

时间:2010-02-28 20:26:22

标签: linux shell

我希望我的脚本定义一个空数组。如果预定义条件为真,则应添加数组值。为此,我所做的是

declare -a FILES
file_count=0
if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then
        echo "$file_ext is not supported for this task."
else
        $FILES[$file_count] = $filename
        file_count=$file_count+1
fi

执行此脚本时,我收到一些错误,如此

linux-softwares/launchers/join_files.sh: 51: [0]: not found

3 个答案:

答案 0 :(得分:3)

当数组中的设置数据无法使用$:

进行调用时
declare -a FILES
file_count=0
if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then
        echo "$file_ext is not supported for this task."
else
        FILES[$file_count]=$filename
        file_count=$file_count+1
fi

没有$的文件。


这对我有用:

#!/bin/bash
declare -a FILES
file_count=0

file_ext='jpg'
SUPPORTED_FILE_TYPE='jpg'
filename='test.jpg'

if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then
        echo "$file_ext is not supported for this task."
else
        FILES[$file_count]=$filename
        file_count=$(($file_count+1))
fi

如您所见,对数学运算稍加修改$(()),但FILES分配是相同的......


正如经过大量测试所指出的那样,Ubuntu默认shell似乎是破折号,这就引发了错误。

答案 1 :(得分:1)

要在数组末尾添加元素,请使用+ =运算符(自2004年bash 3.1起):

files+=( "$file" )

答案 2 :(得分:0)

你也可以这样写它

declare -a FILES
file_count=0
if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then
        echo "$file_ext is not supported for this task."
else
        FILES[((file_count++))]=$filename
fi

致:Vijay

微小的演示,在目录中列出* .txt文件并放入数组文件

declare -a FILES
i=0
for file in *.txt
do
  FILES[((i++))]=$file 
done
# display the array
for((o=0;o<${#FILES};o++))
do
    echo ${FILES[$o]} $o
done

输出

$ ./shell.sh
A.txt 0
B.txt 1
file1.txt 2
file2.txt 3
file3.txt 4