含set -eaux pipefail的Shell脚本无法正确获取输入参数
为何
set -eaux pipefail会导致脚本无法正确获取输入参数? 问题出在set命令的选项写法上:
set的单个字符选项(比如e、a、u、x)可以连写在-后,但pipefail是命名选项,不是单个字符选项,不能直接跟在短选项连写串后面。- 当你写
set -eaux pipefail时,Shell会把pipefail当成要设置的新位置参数列表,直接覆盖了脚本原本的输入参数hello。这就导致$@的值变成pipefail,输出自然不符合预期。
修复方法
用-o选项来启用pipefail,正确写法有两种:
- 分开启用短选项和命名选项:
#!/bin/bash set -eaux set -o pipefail echo arguments:"$@"
- 同一条命令里结合短选项和命名选项:
#!/bin/bash set -eaux -o pipefail echo arguments:"$@"
修改后执行./run.sh hello,就能得到预期的输出arguments:hello。
内容的提问来源于stack exchange,提问作者gfan
相关产品推荐
相关产品推荐

