zsh终端执行bash脚本无法正常传递命令行参数问题排查
故障原因
脚本末尾调用main函数时,硬编码传入了固定参数@a。
Bash 函数内部的$1、$2等位置变量,仅对应当前函数被调用时传入的参数,和脚本启动时接收的外部命令行参数无关。因此无论执行脚本时传入什么内容,main函数读取到的永远是写死的@a,自然无法拿到外部传入的参数值。
修改方案
将最后一行的固定传参改为透传脚本接收的所有位置参数,也就是把main "@a"替换为main "$@"。
修改后完整代码:
#!/bin/bash main(){ name=${1:-you} echo "One for $name, one for me." } main "$@"
这里的"$@"是Bash内置特殊变量,作用是把脚本接收到的所有位置参数原样逐个传递给main函数,没有传参时它会展开为空,正好触发代码里预设的${1:-you}默认值逻辑。
验证结果
- 带参数执行:运行命令
bash tw_fer.sh Adem,正常输出One for Adem, one for me. - 无参数执行:运行命令
bash tw_fer.sh,正常输出One for you, one for me.
内容的提问来源于stack exchange,提问作者ademclk
相关产品推荐
相关产品推荐

