Bash - какая разница между чтением переменной и ее непосредственным назначением? - PullRequest
0 голосов
/ 24 сентября 2018

Просто из любопытства - какая разница в следующем ..

У меня есть скрипт, и я конвертирую из КБ в МБ.Я использую подстановку команд для назначения переменных, но просто не вижу разницы в их назначении следующим образом:

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

&

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

Что нужно для каждого способаделать вещи?

Спасибо

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Кроме того, что упомянул @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
0 голосов
/ 24 сентября 2018

Для простого значения, такого как число, нет никакой разницы.Но попробуйте со значениями, которые содержат завершающие пробелы или более одной строки:

#! /bin/bash
func () {
    printf $'1  2\n3   '
}

command_substitution=$(func)
read process_substitution < <(func)

set -xv
[[ "$command_substitution" == "$process_substitution" ]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...