0

我正在尝试在第二个数组中使用第一个数组(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

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

问候, 金

4

3 回答 3

2

您的第一个 for 循环不正确:

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

您正在遍历locale数组,但您也重定向local_dirs到了 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
于 2013-07-22T09:39:31.363 回答
0

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

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

请尝试验证它是否确实将每个元素添加到“local_dirs”(因为我自己现在无法尝试)

注意:避免对“locale”数组和“locale”变量使用相同的名称!(这就是我在这里将其更改为“a_locale”的原因)

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

于 2013-07-22T09:36:05.313 回答
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
于 2013-07-22T09:32:03.093 回答