You need to enable JavaScript to run this app. 如何在BASH中将管道输入的stdin参数赋值给变量
优惠活动
大模型
产品
解决方案
定价
更多

如何在BASH中将管道输入的stdin参数赋值给变量

解答

需求1:读取管道输入内容赋值给脚本变量

如果需要将管道传入的内容拆分后赋值给对应变量,直接从标准输入读取内容即可,示例脚本如下:

#!/bin/bash
if [ -p /dev/stdin ]; then
    # 按空格拆分输入的前3个字段,分别赋值给三个变量
    read option1 option2 option3
    echo "$option1" "$option2" "$option3"
else
    echo "no input"
fi

执行测试命令echo one two three | ./myscript,即可得到预期输出one two three。

需求2:获取管道符前的完整命令字符串

首先需要明确:Shell 解析带管道的命令时,会先执行|左侧的命令,仅把命令的输出传递给右侧的脚本,左侧的原始命令文本默认不会传递给右侧进程,因此直接执行echo one two three | ./myscript的话,脚本无法直接拿到echo one two three这段文本。
如果要实现该需求,需要主动把原始命令文本作为内容传入管道,示例用法为echo "echo one two three" | ./myscript,对应脚本如下:

#!/bin/bash
if [ -p /dev/stdin ]; then
    # 读取标准输入的全部内容
    input_content=$(cat)
    # 按需求截取前三个字段的话使用如下写法,可输出`echo one two`
    # echo "$input_content" | awk '{print $1,$2,$3}'
    # 直接输出完整命令文本的写法如下
    echo "$input_content"
else
    echo "no input"
fi

如果不想改管道的输入格式,也可以改为把命令文本作为参数直接传给脚本,用法为./myscript "echo one two three",脚本内直接读取$1即可拿到完整命令文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 15:24:01