Bash中如何转义分号?含分号命令行参数传递问题
解决命令行参数中包含分号的传递问题
你的脚本里用echo "$@"的写法是没问题的,问题出在命令行调用时的shell解析逻辑——分号;在bash里是命令分隔符,shell会把它当成“结束当前命令,执行下一个命令”的标记,所以你输入的;;; second argument.;根本没被当成参数传给脚本,而是被shell当成了新的(无效)命令。
要让分号作为参数的一部分传递给脚本,有两种常用方法:
用单引号包裹包含特殊字符的内容:
单引号会让shell完全忽略里面的所有特殊字符,把内容原封不动作为参数传递。比如:# 把所有内容作为单个参数 ./script.sh 'first argument ;;; second argument.;' # 分成两个参数传递 ./script.sh 'first argument ;;;' 'second argument.;'用反斜杠转义每个分号:
在每个分号前加反斜杠\,告诉shell这个分号是普通字符,不要解析它。比如:./script.sh first argument \;\;\; second argument.\;
不管用哪种方法,脚本里的echo "$@"都能正确输出所有包含分号的参数,因为双引号包裹的$@会保留每个参数的原始格式(包括空格和特殊字符)。
内容的提问来源于stack exchange,提问作者Evgeny
相关产品推荐
相关产品推荐

