有没有"清洁"将stdin替换为Bash中的字符串的方法?

时间:2016-12-09 03:22:20

标签: bash command-line command-substitution

当使用bash脚本时,我经常发现自己在做这样的事情:

bc <<< "64*`cat`"

bc <<< "64*`dd`"

如果我想将stdin乘以64.有没有更好的方法将stdin替换为字符串(或命令行,例如在seq 1 2 $(cat)中)?

2 个答案:

答案 0 :(得分:1)

假设您的平台将stdin表示为(character special)文件/dev/stdin(这很有可能),那么

有一种更有效的方式来做这件事:

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

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

但是,虽然这样可以避免调用cat等外部实用程序,但更详细

答案 1 :(得分:0)

另一种不使用字符串扩展的解决方案:

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

但是对于简单的乘法,你实际上不需要使用bc,你可以直接乘以bash:

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