我需要来自这个令人敬畏的社区的帮助。
我正在尝试编写一个循环存储在变量中的句子的每个单词的脚本(例如SENTENCE)。
示例:
for WORD in $SENTENCE
do
echo do something
done
我面临的问题是,如果循环中某个条件为真,我需要更改WORD的值以重新启动循环。
示例:
for WORD in $SENTENCE
do
echo do something
if [[ $SOMETHING_HAPPENED == TRUE ]]; then
WORD=$FIRST_WORD_IN_SENTENCE
fi
done
基本上,如果满足某些条件(SOMETHING_HAPPENED),我需要重新启动循环,但我不知道如何正确地执行此操作。 如果这是一个正常的C循环,我会这样做:
for (i=0;i<10;i++){
do_something();
if (SOMETHING_HAPPENED == TRUE){
i=0;
}
}
我如何在shell脚本中执行此操作?
谢谢。
答案 0 :(得分:0)
while [[ 1 ]]; do # infinite loop
for word in $sentence; do
…
if [[ $condition ]]; then
continue 2 # go to the next iteration of the *outer* loop
fi
done
break # escape the outer loop
done
答案 1 :(得分:0)
你可以在执行for
循环的for
循环周围使用循环,直到没有发生:
repeat=yes
while [ "$repeat" = yes ]; do
repeat=no
for WORD in $SENTENCE; do
# do something
if [[ $SOMETHING_HAPPENED == TRUE ]]; then
repeat=yes
break
fi
done
done
答案 2 :(得分:0)
要重新启动循环,您可以使用BASH数组并像这样运行循环:
arr=( $sentence )
for ((i=0; i<${#arr[@]}; i++)); do
word="${arr[$i]}"
# evaluate condition
if [[ "$SOMETHING_HAPPENED" == TRUE ]]; then
i=0
continue
fi
echo "$word"
done