【问题标题】:how to manipulate array in shell script如何在shell脚本中操作数组
【发布时间】:2013-03-15 19:11:55
【问题描述】:

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

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

【问题讨论】:

标签: linux shell


【解决方案1】:

当数组中的设置数据不能用$调用时:

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

【讨论】:

  • 嗨 enrico,删除 $ 后我得到 linux-softwares/launchers/join_files.sh: 51: FILES[0]: not found 这是什么?
  • 还记得你几分钟前的问题吗?空格很痛 :) 只需在 FILES[$file_count] 之后删除空格
  • 哦,是的。对丢失的病变感到抱歉。 :)
  • 数组分配似乎不起作用 "FILES[$file_count]=$filename" 导致错误消息 "files.sh: 61: FILES[0]=/home/vijay/reservoir.txt ”。你能说一下是什么问题吗?
  • 它对我有用。但不是我的剧本。我怎样才能把我的剧本给你?
【解决方案2】:

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

files+=( "$file" )

【讨论】:

    【解决方案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
    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
    

    【讨论】:

    • 这不起作用。错误消息是“files.sh: 39: Syntax error: "(" unexpected (expecting ")")"
    • 变量 FILES 中有一个额外的“$”。删除它。
    • 我没有得到任何 $ 那在哪里?
    • 我已经改过了。查看我的最新编辑。原来是$FILES[((file_count++))]=$filename。这是错误的
    • 查看我的编辑演示。这个对我有用。您也接受了 Enrico 的回答,在他的回答中,他使用FILES[$file_count]=$filename,没有“$”符号。所以我很困惑为什么你仍然有问题。
    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2012-02-22
    相关资源
    最近更新 更多