シェルスクリプトで配列を使用する

シェルスクリプトで配列を使用する

Webサイトのパスを配列として保存しようとすると問題があります。

forループ内で動作します。配列の内容をエコーすると正しく印刷されます。

ところで、If / Else内で配列の特定の部分を別の変数に保存してみましたが、うまくいきませんでした。配列の特定の部分をエコーすると、何も印刷されません。

コードは次のとおりです。

#! /bin/sh

SITES=()
i=0

for d in /var/www/sites/*/;
do (
    PATHWAY=$d
    SITES+=($PATHWAY)
    echo "$i: $PATHWAY"
);  let "i++"
done

read -p 'Enter the number of the website you want to restore. Enter "exit" to quit. ' url

if [ "$url" = "exit" ]
then
    exit 0

else
    RESTORE_URL=${SITES[url]}
fi

答え1

select以下はドアを使うのに良い場所のようです。

select path in /var/www/sites/* EXIT; do
    if [[ "EXIT" = "$path" ]]; then
        exit 0
    else
        : do stuff here referencing $path
    fi
done

答え2

あなたのループ(私のインデントを含む):

for d in /var/www/sites/*/; do
    (   PATHWAY=$d
        SITES+=($PATHWAY)
        echo "$i: $PATHWAY"  )

    let "i++"
done

ループ本体の大部分がサブシェルにどのようにあるかを確認してください。つまり、これらの変数に対する変更はこのサブシェルの外側には表示されず、ループが繰り返されるたびにリセットされます。

Etherを使用して変更(...)または{...;}完全に削除します。

スクリプト全体のより良い選択肢は、次のようにselect使用することです。ドゥブゴッティは説明する

関連情報