如何在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 

Solutions Collecting From Web of "如何在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 

没有$的文件。


这适用于我:

 #!/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似乎是破折号,这就引发了错误。

要将一个元素添加到数组的末尾,请使用+ =运算符(自2004年bash 3.1以来):

 files+=( "$file" ) 

你也可以这样写

 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 

致:维杰

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

 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