Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内联操作后bash全局变量未更改_Bash - Fatal编程技术网

内联操作后bash全局变量未更改

内联操作后bash全局变量未更改,bash,Bash,我有一个逗号分隔的字符串变量,我需要它来删除来自标准输入的值,这是来自文件的。当我完成脚本时,这些值不会从变量中删除,但可以看出它们已在do循环中删除。如何更新操作的do循环中的全局变量 #!/bin/bash varFoo="text1,text2,obit,poodle,text2,text1,doberman,bloodhound,treewalker,breaker,circuit,bum,rush" echo text2 > /tmp/fileFeed.txt echo

我有一个逗号分隔的字符串变量,我需要它来删除来自标准输入的值,这是来自文件的。当我完成脚本时,这些值不会从变量中删除,但可以看出它们已在do循环中删除。如何更新操作的do循环中的全局变量

#!/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
因此,您会注意到循环从字符串中删除了值,但当它退出循环时,变量在进入循环之前仍保持原始值。

此处

cat /tmp/fileFeed.txt | while read word; do
   ....
done
while循环在子shell中执行。因此,所有变量的值在循环外都不可用。将其更改为:

while read word; do
   ....
done < /tmp/fileFeed.txt
读单词时
;做
....
完成

您可能还对阅读感兴趣。

众所周知的问题-由于管道的原因,您得到了一个subshell。UUoC的一个缺点(无用地使用
cat
)。您还可以查找
shopt-s lastpipe
。但在这里,数组似乎是显而易见的解决方法。这是一个过时的拷贝。主要位置是