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

含set -eaux pipefail的Shell脚本无法正确获取输入参数

为何set -eaux pipefail会导致脚本无法正确获取输入参数?

问题出在set命令的选项写法上:

  • set的单个字符选项(比如e、a、u、x)可以连写在-后,但pipefail是命名选项,不是单个字符选项,不能直接跟在短选项连写串后面。
  • 当你写set -eaux pipefail时,Shell会把pipefail当成要设置的新位置参数列表,直接覆盖了脚本原本的输入参数hello。这就导致$@的值变成pipefail,输出自然不符合预期。

修复方法

用-o选项来启用pipefail,正确写法有两种:

  1. 分开启用短选项和命名选项:
#!/bin/bash
set -eaux
set -o pipefail

echo arguments:"$@"
  1. 同一条命令里结合短选项和命名选项:
#!/bin/bash
set -eaux -o pipefail

echo arguments:"$@"

修改后执行./run.sh hello,就能得到预期的输出arguments:hello。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:14:54