2016-12-09 5 views
1

Когда Баш сценариев, я часто ловлю себя делать что-то вроде этого:Есть ли «более чистый» способ заменить stdin в строку в Bash?

bc <<< "64*`cat`" 

или

bc <<< "64*`dd`" 

, если я хочу, чтобы умножить STDIN на 64. Есть ли лучший способ заменить стандартный ввод в строку (или в командной строке, например, в seq 1 2 $(cat))?

+2

Что случилось с ' read'? –

+0

^^ Я бы тоже попробовал это: 'read calc; bc <<< "64 * $ calc" ' – anishsane

ответ

1

Там есть несколько более эффективным способ сделать это, предполагая вашу платформу представляет стандартный ввод как (character special) Файл /dev/stdin (что вполне вероятно):

$ echo 2 | bc <<< "64 * $(</dev/stdin)" 
128 

$ echo 5 | seq 1 2 "$(</dev/stdin)" 
1 
3 
5 

Однако, в то время как это позволяет избежать вызова на внешняя полезность, такая как cat, это более подробный.

0

Другое решение без использования расширения строки:

(echo -n '64*'; cat) | bc 

Но для простого умножения на самом деле вам не нужно использовать bc и вы можете умножить прямо в Баш:

read a 
echo "$((a*64))"