在 shell 脚本中使用数组

在 shell 脚本中使用数组

我正在尝试将网站的路径存储在数组中,但遇到了麻烦。

它在 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 之外看到,并且它们会在循环中的每次迭代中重置。

乙醚将其更改(...){...;}或完全删除它们。

整个脚本的更好替代方案是使用selectas多普戈蒂解释

相关内容