0

最初の配列 (Locale) の出力を 2 番目の配列で使用しようとしています。残念ながら、私はそれを機能させることができませんでした。

#!/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いますが、for ループにもリダイレクトlocal_dirsしていますが、これは意味がなく、機能しません。

for ループの出力を配列に格納する場合は、次のようにします。

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

コマンドの出力を配列に格納するための一般的な構文は次のとおりです。myarray=( $(command) )

ただし、この場合、2 番目の配列は必要ありません。次のように同じことを達成できます。

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

あなたの言いたいことを正確に理解しているかどうかはわかりませんが、これはうまくいくでしょうか:

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 に答える
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 に答える