Unix变量存大JSON执行echo命令报“Filename too long”求助
解决超大JSON变量写入文件的"Filename too long"问题
错误原因
你遇到的错误本质是命令行参数长度超出系统限制:当执行echo $rules时,shell会先展开未加引号的$rules,将JSON内容拆分成大量分词作为命令行参数传给echo,总长度超过了系统允许的最大命令行参数长度,因此触发报错(错误描述"Filename too long"有误导性,实际是参数过长)。另外注意,你的变量赋值语句rules = '<BIG JSON>';有语法错误,shell变量赋值时=前后不能有空格,正确写法是rules='<BIG JSON>'。
解决方法
以下几种方式都能绕过命令行参数长度限制,完美写入超大变量内容:
方法1:使用printf配合带引号的变量
用printf的格式字符串接收变量,避免将变量内容拆分成多个参数:printf '%s' "$rules" > filename.txt"$rules"会保留变量的原始格式(包括换行、空格、特殊字符),确保JSON内容完整。方法2:使用here-string(推荐)
通过here-string将变量内容作为输入传给cat,完全避开命令行参数传递:cat > filename.txt <<< "$rules"这种方式对任意大小的变量都适用,是处理超大内容变量最稳妥的方式。
方法3:使用here-doc(适合复杂场景)
如果需要在写入前做简单处理,也可以用here-doc:cat > filename.txt << EOF $rules EOF注意
EOF要顶格写,且前后不能有多余空格,否则会导致内容截断或错误。
内容的提问来源于stack exchange,提问作者Atul Jain
相关产品推荐
相关产品推荐

