我试图在第二个数组中使用第一个数组(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
我甚至不确定它是否可能,我总是可以将它打印到文件中。
此致 金
答案 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”来确保没有碰撞)