推荐答案
在 Shell 脚本中,可以通过以下几种方式获取外部命令的输出:
使用反引号(
`
):output=`command` echo $output
使用
$()
:output=$(command) echo $output
使用管道和
read
命令:command | read output echo $output
使用
exec
和文件描述符:exec 3< <(command) read output <&3 echo $output exec 3>&-
本题详细解读
1. 使用反引号(`
)
反引号是 Shell 中用于命令替换的传统方式。它会执行反引号内的命令,并将命令的输出替换到脚本中。例如:
output=`ls` echo $output
这种方式简单易用,但在嵌套使用时容易出错,且可读性较差。
2. 使用 $()
$()
是反引号的现代替代品,功能相同但更易读且支持嵌套。例如:
output=$(ls) echo $output
推荐使用 $()
,因为它更清晰且不易出错。
3. 使用管道和 read
命令
通过管道将命令的输出传递给 read
命令,可以将输出存储在变量中。例如:
ls | read output echo $output
需要注意的是,read
命令在子 Shell 中执行时,变量可能不会在父 Shell 中保留。因此,这种方式在某些情况下可能不适用。
4. 使用 exec
和文件描述符
通过 exec
命令和文件描述符,可以将命令的输出重定向到一个文件描述符,然后使用 read
命令读取。例如:
exec 3< <(ls) read output <&3 echo $output exec 3>&-
这种方式适用于需要处理多个命令输出的复杂场景,但代码较为复杂。
总结
- 对于简单的命令输出获取,推荐使用
$()
。 - 对于需要处理多个命令输出的复杂场景,可以考虑使用
exec
和文件描述符。 - 避免使用反引号,除非在旧脚本中需要兼容性。