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

Bash脚本传入含管道符|的命令行参数无法正确输出如何解决?

问题原因
  • 该问题和脚本内部的变量处理逻辑无关,根因出现在调用脚本时父Shell的命令行解析阶段。
    你执行脚本时应该使用了类似./test.sh |ls的写法,|是Shell的内置管道符,会被父Shell优先解析:父Shell会将管道前的命令输出作为管道后ls命令的输入,同时不会将|ls作为参数传递给你的脚本,最终表现为直接打印目录列表。
  • read读取输入不会触发该问题的原因:
    read是从标准输入读取内容,你手动输入的|ls属于输入流内容,不会被Shell当成命令行特殊符号解析,会直接作为普通字符串赋值给变量,因此可以正常输出。
解决方法

调用脚本时,将包含Shell特殊符号(包括|、&、*、空格等)的参数用单引号或者双引号包裹即可,示例:

# 单引号包裹(推荐,单引号内所有字符都会被识别为普通文本)
./test.sh '|ls'

# 双引号包裹也可实现效果
./test.sh "|ls"

完成上述修改后,你脚本中原有的echo "Hello, $1."写法即可正常输出Hello, |ls,无需修改脚本内部逻辑。

内容的提问来源于stack exchange,提问作者PSKP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:36:03