我正在尝试将网站的路径存储在数组中,但遇到了麻烦。
它在 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
请注意大部分循环体是如何位于子 shell 中的?这意味着对这些变量的更改不会在该子 shell 之外看到,并且它们会在循环中的每次迭代中重置。
乙醚将其更改(...)
为{...;}
或完全删除它们。
整个脚本的更好替代方案是使用select
as多普戈蒂解释。