Bash-读取变量和直接分配变量有什么区别?

时间:2018-09-24 13:02:27

标签: bash variables scripting

只是出于好奇-下面有什么区别。

我有一个脚本,我正在从KB转换为MB。我正在使用命令替换来分配变量,但只是看不到分配变量的区别如下:

backup_size=$(echo "$client_kb/1024" | bc -l)

read backup_size < <(echo "$client_kb/1024" | bc -l)

每种做事方式都需要什么?

谢谢

2 个答案:

答案 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