Присвоение значения stdout переменной

Поэтому я пытаюсь создать сценарий sh, в котором я помещаю значение, полученное из команды, в переменную, в данном случае n, но я понятия не имею, что я делаю, и это, очевидно, не работает лол:

1 n=0 2 cat test | grep -cE '[0-9]{1,4}' > $n 3 echo "there were $n lines in test" > rtest1 

Создает файл rtest1, в котором говорится, что в тесте было 0 строк

Между прочим, test – это файл с 10 строками.

Так как же присвоить значение из stdout переменной в сценариях оболочки? : D

То, что вы хотите, называется заменой команды :

 file=./path/to/some/file n="$(grep -cE '[0-9]{1,4}' < "$file")" echo "there were $n matching lines in $file" 

Конечно, вам не нужны кавычки в назначении, просто n=$(...) подойдет. Но в целом вы хотите кавычки вокруг подстановки команд. Также обратите внимание, что он ест конечные строки.

Смотрите также:

  • Как правильно заключить в кавычки $ (команда $ arg)?
  • В чем разница между $ (вещи) и `вещи`?