Bash脚本问题:如何在函数迭代中传递变量生成带&&的组合输出
修正Bash脚本实现带
&&的多输入组合输出 问题分析
原脚本存在两个核心问题:
- 使用
$(m...)执行函数时,函数运行在子shell中,修改的g变量无法传递回父shell,导致t1、t2始终为空,无法正确判断是否需要添加&&分隔符。 - 未处理输入为空的场景,空输入会被错误拼接,且分隔符逻辑依赖不可靠的跨shell变量传递。
修正后的脚本
以下是直接解决问题的简化版本,逻辑更清晰且避免子shell变量传递问题:
#!/bin/bash # 读取输入的函数 r() { read -rp "Give text: " var } # 初始化结果字符串 output="" # 处理第一个输入 r if [[ -n "$var" ]]; then output="$var" fi # 处理第二个输入 r if [[ -n "$var" ]]; then if [[ -n "$output" ]]; then output="$output && $var" else output="$var" fi fi # 处理第三个输入 r if [[ -n "$var" ]]; then if [[ -n "$output" ]]; then output="$output && $var" else output="$var" fi fi # 输出最终结果 echo "$output"
工作逻辑说明
- 每次读取输入后,先判断输入内容是否非空。
- 如果已有结果字符串不为空,且当前输入非空,则在结果后追加
&&和当前输入;如果结果为空,则直接将当前输入赋值给结果。 - 空输入会被直接忽略,不会产生多余的分隔符或空内容。
测试验证
对应你需要的输入组合,脚本会输出预期结果:
- 输入
fire→water→air→fire && water && air - 输入
fire→water→回车 →fire && water - 输入回车→
water→air→water && air - 输入
fire→回车→回车 →fire - 输入回车→
water→回车 →water - 输入回车→回车→
air→air - 全回车 → 空行
内容的提问来源于stack exchange,提问作者growler11
相关产品推荐
相关产品推荐

