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

Bash脚本问题:如何在函数迭代中传递变量生成带&&的组合输出

修正Bash脚本实现带&&的多输入组合输出

问题分析

原脚本存在两个核心问题:

  1. 使用$(m...)执行函数时,函数运行在子shell中,修改的g变量无法传递回父shell,导致t1、t2始终为空,无法正确判断是否需要添加&&分隔符。
  2. 未处理输入为空的场景,空输入会被错误拼接,且分隔符逻辑依赖不可靠的跨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"

工作逻辑说明

  1. 每次读取输入后,先判断输入内容是否非空。
  2. 如果已有结果字符串不为空,且当前输入非空,则在结果后追加&&和当前输入;如果结果为空,则直接将当前输入赋值给结果。
  3. 空输入会被直接忽略,不会产生多余的分隔符或空内容。

测试验证

对应你需要的输入组合,脚本会输出预期结果:

  • 输入fire→water→air → fire && water && air
  • 输入fire→water→回车 → fire && water
  • 输入回车→water→air → water && air
  • 输入fire→回车→回车 → fire
  • 输入回车→water→回车 → water
  • 输入回车→回车→air → air
  • 全回车 → 空行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:55:25