Bash中如何将变量值作为文件传递给命令且不使用管道?
解决方案
错误原因分析
你执行$(wc -l < "$X")失败的核心原因是:<重定向符号后需要传入文件路径,而你直接传入变量$X的内容,Shell会尝试把ps输出的每一行内容当成文件名去读取,自然会触发“无此文件或目录”的报错。
可行实现方法(均不使用管道)
方法1:使用Here String直接传入标准输入
Bash内置的<<<(Here String)语法可以直接把变量内容作为标准输入传递给命令,是这类场景最简洁的实现:
# 统计行数直接写入变量 line_count=$(wc -l <<< "$X") # 输出结果 echo "$line_count"
注意:变量
$X必须包裹双引号,否则Shell会自动丢弃内容里的换行符,导致行数统计错误。
方法2:使用进程替换模拟文件参数
如果你需要严格实现「把变量值当成文件路径参数传递给命令」的需求,可以用Bash的进程替换语法<(...),它会把括号内命令的输出封装为/dev/fd/下的伪文件,可直接作为文件参数传入命令:
# 进程替换返回的伪文件路径直接传给wc作为文件参数 wc_result=$(wc -l <(echo "$X")) # 提取统计的行数字段(直接传文件参数wc会额外输出伪文件路径,需过滤) line_count=$(awk '{print $1}' <<< "$wc_result") echo "$line_count"
内容的提问来源于stack exchange,提问作者ethelion
相关产品推荐
相关产品推荐

