0
我有一個逗號分隔的字符串變量,我需要從標準輸入中刪除來自文件的值。當我完成腳本時,值不會從變量中刪除,但可以告訴它們在do循環中被刪除。如何在操作的do循環內更新一個全局變量?內聯操作後bash全局變量未更改
#!/bin/bash
varFoo="text1,text2,obit,poodle,text2,text1,doberman,bloodhound,treewalker,breaker,circuit,bum,rush"
echo text2 > /tmp/fileFeed.txt
echo circuit >> /tmp/fileFeed.txt
echo rush >> /tmp/fileFeed.txt
cat /tmp/fileFeed.txt | while read word; do
removeWord=${varFoo//$word,/}
removeWord=${removeWord//,$word/}
echo ========== transaction seperator ==========
echo word=$word
echo removeWord=$removeWord
varFoo=$removeWord
done
echo ^^^^^^^^^^^exiting work loop and heading to the end ^^^^^^^^^^^
echo FINAL varFoo = $varFoo
exit $?
輸出是
========== transaction seperator ==========
word=text2
removeWord=text1,obit,poodle,text1,doberman,bloodhound,treewalker,breaker,circuit,bum,rush
========== transaction seperator ==========
word=circuit
removeWord=text1,obit,poodle,text1,doberman,bloodhound,treewalker,breaker,bum,rush
========== transaction seperator ==========
word=rush
removeWord=text1,obit,poodle,text1,doberman,bloodhound,treewalker,breaker,bum
^^^^^^^^^^^exiting work loop and heading to the end ^^^^^^^^^^^
FINAL varFoo = text1,text2,obit,poodle,text2,text1,doberman,bloodhound,treewalker,breaker,circuit,bum,rush
所以,你會發現,循環去除字符串值,但,當它退出循環變量仍然是在進入循環之前的原始值。
衆所周知的問題 - 你有一個子管道,因爲管道。 UUoC的一個缺點(無用的'cat')。你也可以查看'shopt -s lastpipe'。 –
http://mywiki.wooledge.org/BashFAQ/024但在這裏,一個數組似乎是明顯的解決方法。 – tripleee