可以在shell中读取命令用于将字符串赋值给数组并重置默认数组

时间:2016-11-24 06:54:42

标签: arrays linux bash shell

function get_path
{
<HERE> 
if [ $TYPE= 'MUSIC' ]
then
    FILELIST_TEMP+=("/data/user/DOWNLOAD,/data/user/MUSIC")
    IFS=',' read -r -a FILELIST_PATH <<< "$FILELIST_TEMP"
elif [ $TYPE= 'IMAGE' ]
    FILELIST_PATH+=("/data/user/IMAGE")
fi
}

上面的代码用于将文件夹路径存储到数组中。有两种情况,其中一个变量有1个字符串或2个字符串。

1)可以读取命令用于将字符串分配给数组吗?如何操作?(图像部分)

2)ARRAY + =“value”是否等于向数组附加新值?它不会先将数组重置为默认值0然后追加?

3a)如果从main调用上面的代码,我在declare -a FILELIST_PATH=()声明<HERE>。当我通过调用FILELIST_PATH中的数组总数进行测试时,它显示为零。< / p>

3b)如果我错了,请纠正我read -r -a FILELIST_PATH也与declare -a FILELIST_PATH=()相同,它将数组重置为0,但即使在function_get_path处声明它也可以在main函数中访问那是为什么?

所需输出:

 /data/user/DOWNLOAD
 /data/user/MUSIC

 /data/user/IMAGE

1 个答案:

答案 0 :(得分:1)

1)是的,-a选项允许您读入数组。

2)ARRAY+="value"不附加到数组,它必须是ARRAY+=("value")ARRAY+="value"valueARRAY[0]连接起来。他们都没有重置阵列。

3a)当你在函数中使用declare时,变量是函数的局部变量,除非你使用-g选项使它成为一个全局变量。

3b)您必须使用declarelocal来声明局部变量。如果您只是使用VAR=valueread VAR分配未声明的变量,则不会在本地声明它,因此会创建一个全局变量。

仅供参考,定义函数的标准语法如下:

get_path() {
    <HERE> 
    if [ $TYPE= 'MUSIC' ]
    then
        FILELIST_TEMP+=("/data/user/DOWNLOAD,/data/user/MUSIC")
        IFS=',' read -r -a FILELIST_PATH <<< "$FILELIST_TEMP"
    elif [ $TYPE= 'IMAGE' ]
        FILELIST_PATH+=("/data/user/IMAGE")
    fi
}

function get_pathbash扩展程序。