如何在Bash中通过进程替换为变量赋值?需丢弃标准输出且不使用临时文件
可行实现方案
方案1:直接用命令替换捕获输出
如果只是要把命令输出存到变量,同时丢弃终端标准输出,直接用命令替换就能搞定——它会自动捕获命令的标准输出,不会泄露到终端:
var=$(echo test | tee /dev/null) echo "var = $var"
这里tee /dev/null模拟了原本写入文件的操作(把内容丢去/dev/null),命令替换$(...)捕获tee的输出并赋值给var,终端不会有额外输出。
方案2:read配合进程替换(适配多行内容)
如果要捕获含换行的多行内容,或者需要更灵活的输入处理,用read搭配进程替换更合适——read在当前shell环境执行,变量赋值直接生效:
# 捕获单行内容 read -r var < <(echo test | tee /dev/null) echo "var = $var" # 捕获多行内容(比如输出带换行) read -r -d '' var < <(echo -e "test\nline2" | tee /dev/null) echo "var = $var"
-d ''参数让read读取到EOF为止,避免换行符截断内容。
方案3:子shell传值(适配复杂逻辑)
如果命令逻辑复杂,需要在子shell里做额外处理再传值回父shell,可以让子shell输出变量内容,父shell捕获后赋值:
var=$( # 这里可以加任意复杂处理逻辑 echo test | tee /dev/null | cat ) echo "var = $var"
本质和方案1类似,但适合需要在子shell中完成多步处理的场景。
内容的提问来源于stack exchange,提问作者DBear
相关产品推荐
相关产品推荐

