我已經使用以下代碼停留了相當長的一段時間。它可以工作,但變量會丟失迭代期間設置的值。在for循環中使用管道。如何在for循環中保留變量的值
我有以下代碼
mistakes=0
entered_chars=()
word_length=0
answer=""
answer_guess=""
checkIfLetterInsideWord(){
exists=0
letter=$2
word_array=`echo $1 | grep -o . `;
for ((i=1; i <= $word_length; i++))
do
if [[ "${1:$i-1:1}" = ${letter} ]]; then
exists=1
answer_guess=$(echo $answer_guess | sed "s/-/${letter}/{i}")
fi
done
echo $exists
}
askUserInput(){
answer=$answer
echo $answer
echo "Please type a letter"
read user_input
if [ ! -z $user_input ]; then
user_input=$(echo $user_input | tr '[:upper:]' '[:lower:]')
if [ $(checkIfAlreadyEntered "$user_input") -eq 0 ]; then
if [ $(checkIfLetterInsideWord $answer $user_input) -eq 0 ]; then
mistakes=$((mistakes + 1)); fi
echo "Current mistake count; $mistakes "
entered_chars+=($user_input)
else
echo "Char has already been entered"
fi
else
echo "You haven't entered any input!"
fi
}
guessTheWord() {
answer=$OPTARG
word_length=$(printf $answer | wc -m)
temp=$(echo $answer | sed 's/\(.\)/\1 /g')
array=($temp)
echo "The chosen word is $word_length long"
gameOngoing=true
for((i=1; i<=$word_length; i++)) do
answer_guess="$answer_guess-"
done
while $gameOngoing
do
echo $answer_guess
askUserInput $answer
done
}
我想保留變量answer_guess的價值。我明白,由於在循環內部使用了一條管道,它會失去價值,但我不知道要解決這個問題。
在該代碼段沒有什麼會導致'answer_guess'被丟棄的價值。請提供一個[mcve]來演示您希望解決的問題。 – rici
'answer_guess'除了'sed'外沒有賦值。如果在第一次迭代時它是空的,那麼對於所有其他的將是空的。你的'sed'行是可疑的,當它應該是一個''''時你有一個'''',爲什麼你有'{i}'?這對我的'sed'版本無效,因爲你要替換的字符,你不需要區分大小寫的替換。 – cdarke
對不起,這是一種錯誤的類型) 我使用{i}作爲索引,answer_guess是一個填充的變量。我創建的是一個hang子手遊戲,並且最初,answer_guess包含值'-----' 我正在做的是取代 - 用正確的猜測字母 – Trickflick