在$ sentence中单词的shell脚本如何更改单词的值?

时间:2014-03-04 17:05:33

标签: bash shell for-loop

我需要来自这个令人敬畏的社区的帮助。

我正在尝试编写一个循环存储在变量中的句子的每个单词的脚本(例如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脚本中执行此操作?

谢谢。

3 个答案:

答案 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