如何将命令输出值保存到对应变量?变量line/word/char未赋值问题
解决Shell变量无法捕获
wc命令输出的问题 你的问题核心是没用到命令替换来捕获命令的输出——直接写line= wc -l < $*时,shell会把line=当成临时环境变量赋值,然后单独执行wc -l < $*,变量line根本没拿到wc的计算结果。
修正后的基础写法
用$(command)(推荐,嵌套逻辑更清晰)或者反引号`command`来捕获命令输出,再赋值给变量:
# 用$()捕获命令输出,同时给$*加双引号处理带空格的文件名 line=$(wc -l < "$*") word=$(wc -w < "$*") char=$(wc -m < "$*") echo "Number of characters in test.txt is $char" echo "Number of words in test.txt is $word" echo "Number of lines in test.txt is $line"
更高效的优化写法
其实不用三次调用wc,一次调用就能同时获取行数、单词数、字符数,再用read把结果分配到对应变量,减少文件读取次数:
# 一次wc输出三个值,用read拆分到变量 read line word char <<< $(wc -lwm < "$*") echo "Number of characters in test.txt is $char" echo "Number of words in test.txt is $word" echo "Number of lines in test.txt is $line"
关键知识点
- 命令替换
$(command)是Shell中获取命令执行结果并赋值给变量的标准方式,它会把命令的标准输出内容作为变量的值。 - 给
$*加上双引号"$*",可以避免文件名包含空格、特殊字符时出现解析错误。
内容的提问来源于stack exchange,提问作者Himanshu Sharma
相关产品推荐
相关产品推荐

