2013-07-22 56 views
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 

我甚至不知道这是可能的,我总是可以打印到一个文件。

问候, 金

回答

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 
+0

不错的答案,但你也应该改变第三个循环:1)'folder =“./ public/$ loc/*”'(原始文件试图用引号包围并添加一个分隔空间,但它不是文件夹名称的一部分!)2) echo:'echo sudo chown -R“$ {webuser}”“$ {folder}”''echo sudo chmod -R 775“$ {folder}”'(这样,只需删除“echo”就会启动如果文件夹中有空格等,需要使用引号,并且第二个循环也应该被编辑为不在文件夹名称中添加引号和尾部空格 –

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 
+0

你的代码段中有语法错误,所以这是行不通的。 –

+0

对不起,我修复了这个问题。是否缺少'do':P –

+0

不,我正在谈论围绕'='的空间;-) –

0

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

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

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

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

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

+0

我不知道为什么你需要两个单独的循环,虽然:)(虽然它不会伤害太多,也许你需要local_dirs列表的其他东西)(我想这个评论是更多的OP,而不是你) –

+0

@SvendHansen:它的确是更多的OP ^^我猜他简化了脚本,并可能需要保留该阵列的其他用途(或者他只是想知道如何去做) –