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
使用することです。ドゥブゴッティは説明する。