Bash脚本处理命令行参数时引号失效问题求助
解决Bash脚本参数处理的空格拆分问题
啊,这个问题我太熟悉了——你踩中了Bash里**单词拆分(Word Splitting)**的经典陷阱!
问题根源
当你写for i in $@时,Bash会把$@展开成不带引号的参数列表。这时候,任何包含空格的参数(比如你传递的"Arg 1")都会被Bash按照空格拆分成两个独立的元素:Arg和1。虽然$#统计的是你实际传递的原始参数数量(也就是2个),所以它的输出是对的,但循环遍历的是拆分后的单词,导致参数处理出错。
修复方法
给$@加上双引号,让Bash保留每个参数的完整性。修改后的脚本如下:
#! /bin/bash # Demo bash script for i in "$@" do echo "$i" done echo $# args
这里的关键是"$@"——它会把每个传递的参数都当作一个独立的整体,哪怕参数里包含空格、制表符或者其他特殊字符。另外,给echo里的$i也加上双引号,能避免后续如果参数有其他特殊字符时再出问题。
测试结果
当你执行myscript.sh "Arg 1" "Arg 2"时,输出会变成:
Arg 1 Arg 2 2 args
完全符合你的预期!
内容的提问来源于stack exchange,提问作者Big Ian
相关产品推荐
相关产品推荐

