如何在Bash脚本中调用函数并向目标函数注入输入参数
解决方案
方法1:使用管道传递输入
直接通过echo输出'2',再用管道传递给DoingSomething的read命令,替代终端输入:
function DoingSomething { read -r input if [ "$input" == '1' ]; then echo "执行操作1" elif [ "$input" == '2' ]; then echo "执行操作2" else echo -e "输入无效!" fi } function DoingThat { param=60 # 示例参数 if [ $param -gt 50 ]; then echo '2' | DoingSomething else echo -e "你没问题!" fi } DoingThat
方法2:使用Here字符串(更简洁)
Bash支持<<<语法,直接将字符串作为命令的标准输入,写法更简洁:
function DoingSomething { read -r input if [ "$input" == '1' ]; then echo "执行操作1" elif [ "$input" == '2' ]; then echo "执行操作2" else echo -e "输入无效!" fi } function DoingThat { param=60 # 示例参数 if [ $param -gt 50 ]; then DoingSomething <<< '2' else echo -e "你没问题!" fi } DoingThat
方法3:修改函数为接受参数(推荐)
让DoingSomething直接接受命令行参数,避免依赖终端输入,这种方式更可靠,也更符合脚本自动化的设计思路:
function DoingSomething { local input="$1" # 从第一个参数获取输入 if [ "$input" == '1' ]; then echo "执行操作1" elif [ "$input" == '2' ]; then echo "执行操作2" else echo -e "输入无效!" fi } function DoingThat { param=60 # 示例参数 if [ $param -gt 50 ]; then DoingSomething '2' # 直接传递参数 else echo -e "你没问题!" fi } DoingThat
原代码的几个错误修正
- 条件判断的方括号
[和]两侧必须加空格,比如原代码的elif [\"$input\" == '2' ];要改成elif [ "$input" == '2' ]; - 代码中的转义引号
\"是多余的,直接使用"即可 - 反引号
`DoingSomething`的用法错误,反引号是用来捕获命令输出的,这里直接调用函数只需写DoingSomething即可
内容的提问来源于stack exchange,提问作者SillyGoofyCoder
相关产品推荐
相关产品推荐

