如何在变量中打印数组的内容

时间:2013-07-22 09:23:43

标签: bash shell unix

我试图在第二个数组中使用第一个数组(Locale)的输出。不幸的是,我无法让它工作。

#!/bin/sh

locale=(ch de es fr in pl it be)

webuser=apache

for locale in "${locale[@]}"
do
    echo -n "\"./public/$locale/*\" "
done < <(local_dirs)

for folder in "${local_dirs[@]}"
do
    echo "sudo chown -R $webuser $folder"
    #sudo chown -R $webuser $folder
    echo "sudo chmod -R 775 $folder"
    #sudo chmod -R 775 $folder
done

我甚至不确定它是否可能,我总是可以将它打印到文件中。

此致 金

3 个答案:

答案 0 :(得分:2)

您的第一个for循环错误:

for locale in "${locale[@]}"
do
    echo -n "\"./public/$locale/*\" "
done < <(local_dirs)

您正在遍历locale数组但是您也将local_dirs重定向到for循环中,这对于没有意义且无效的for循环。

如果要将for循环的输出存储到数组中,可以这样做:

locale=(ch de es fr in pl it be)
local_dirs=( $(for locale in "${locale[@]}"
               do
                   echo -n "\"./public/$locale/*\" "
               done) 
           )

将命令输出存储到数组中的一般语法是:myarray=( $(command) )

但是,在这种情况下,您不需要第二个数组。你可以做到这样的事情:

for loc in "${locale[@]}"
do
    folder="\"./public/$loc/*\" "
    echo "sudo chown -R $webuser $folder"
    #sudo chown -R $webuser $folder
    echo "sudo chmod -R 775 $folder"
    #sudo chmod -R 775 $folder
done

答案 1 :(得分:0)

我不确定我是否完全理解你的意思,但这会有效:

locale=(ch de es fr in pl it be)

webuser=apache

for locale in "${locale[@]}"
do
    folder=`echo -n "\"./public/$locale/*\" "`
    echo "sudo chown -R $webuser $folder"
    #sudo chown -R $webuser $folder
    echo "sudo chmod -R 775 $folder"
    #sudo chmod -R 775 $folder
done

答案 2 :(得分:0)

你的第一个循环可能只是:

for a_locale in "${locale[@]}"
do
    local_dirs+=("\"./public/${a_locale}/*\"")
done

请尝试验证它确实添加到“local_dirs”每个元素(因为我现在不能自己尝试)

注意:避免对“locale”数组和“locale”变量使用相同的名称! (这就是为什么我把它改为“a_locale”)

(你需要避免任何保留字,对于变量名,所以我通常使用“a_name”来确保没有碰撞)