You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:45:44