Atribuindo um valor com echo piped junto com o comando bc e usando uma variável como um argumento

0

Basicamente eu gostaria de atribuir à variável $ finalbyte um valor (que consiste em uma representação binária de um byte, por exemplo, 11100000). Então, tentando fazer isso, coloquei o seguinte como parte de um script:

field4=224     ##224 for example, it could be any number.
               ##Depends on the script

finalbyte=$(echo 'obase=2; ibase=10; ${field4}' | bc)   ##<-------error here

Eu recebo o seguinte erro, que é meio óbvio de interpretar, mas o meu problema é que eu não sei ou imagino a maneira que o $ field4 poderia aninhar-se entre os outros argumentos. O erro é:

(standard_in) 1: illegal character: $
    
por Vaios Argiropoulos 02.07.2013 / 21:42

2 respostas

6

Use aspas duplas em vez de aspas simples. Parâmetros não são substituídos entre aspas simples

 finalbyte=$(echo "obase=2; ibase=10; ${field4}" | bc)

Além disso, se você estiver no bash, você pode preferir here-strings para comandar a substituição para este caso:

bc <<<"obase=2; ibase=10; ${field4}"
    
por 02.07.2013 / 21:46
2

mova sua variável para fora do argumento entre aspas para ecoar:

$ field4=224 finalbyte=$(echo 'obase=2; ibase=10;' ${field4}| bc )
$ echo $finalbyte
11100000
    
por 02.07.2013 / 21:48