咨询:Shell脚本中两种for循环写法为何输出不同?
为什么两个Shell脚本的输出不同?
核心原因是双引号会阻止Shell的分词操作,直接拆解两个脚本的执行逻辑:
脚本1的执行过程
COLORS="RED YELLOW GREEN" for i in $COLORS do echo $i done
这里$COLORS没有被引号包裹,Shell会触发默认的**分词(Word Splitting)**行为:它会把变量值里的空格作为分隔符,将"RED YELLOW GREEN"拆成三个独立的单词:RED、YELLOW、GREEN。
所以for循环会依次遍历这三个单词,每次循环输出一个,最终输出是:
RED YELLOW GREEN
脚本2的执行过程
for i in "RED YELLOW GREEN" do echo $i done
这里的"RED YELLOW GREEN"被双引号完整包裹,Shell会把整个字符串当成单个独立的单词,不会进行分词拆分。
所以for循环只会执行一次,把整个字符串作为i的值输出,最终输出是:
RED YELLOW GREEN
简单总结:
- 未被引号包裹的变量/字符串,Shell会按空格(默认IFS规则)拆分成多个项
- 被双引号包裹的内容,会被视为一个整体,保留内部的空格,不会拆分
内容的提问来源于stack exchange,提问作者notomera
相关产品推荐
相关产品推荐

