只是出于好奇-下面有什么区别。
我有一个脚本,我正在从KB转换为MB。我正在使用命令替换来分配变量,但只是看不到分配变量的区别如下:
backup_size=$(echo "$client_kb/1024" | bc -l)
&
read backup_size < <(echo "$client_kb/1024" | bc -l)
每种做事方式都需要什么?
谢谢
答案 0 :(得分:2)
对于像数字这样的简单值,没有区别。但是,请尝试使用包含尾随空格或多于一行的值:
#! /bin/bash
func () {
printf $'1 2\n3 '
}
command_substitution=$(func)
read process_substitution < <(func)
set -xv
[[ "$command_substitution" == "$process_substitution" ]]
答案 1 :(得分:1)
@choroba提到的内容除外。它还会影响错误处理。考虑一种情况,仅当sample_func
的输出返回成功的错误代码时,才可以使用该输出。
sample_func() {
echo "Hello world"
return 1
}
command_substitution=$(sample_func)
rc=$?
echo "Error: $rc"
echo "command_substitution: $command_substitution"
echo '---'
read process_substitution < <(sample_func)
rc=$?
echo "Error: $rc"
echo "process_substitution: $process_substitution"
输出:
Error: 1
command_substitution: Hello world
---
Error: 0
process_substitution: Hello world