this post was submitted on 24 Oct 2023
7 points (100.0% liked)

Programming

13384 readers
1 users here now

All things programming and coding related. Subcommunity of Technology.


This community's icon was made by Aaron Schneider, under the CC-BY-NC-SA 4.0 license.

founded 2 years ago
MODERATORS
 

Any ideas? I am attempting to write a script that uses sed.

If done this way it fails

  • rmdec="sed 's/..................$//'"
  • i1xmr=$(echo "$i1p/$apiresponse*1000" |bc -l |$rmdec)

But if i do it this way it works

  • i1xmr=$(echo "$i1p/$apiresponse*1000" |bc -l | sed 's/..................$//')
you are viewing a single comment's thread
view the rest of the comments
[โ€“] bizdelnick@lemmy.ml 3 points 1 year ago* (last edited 1 year ago) (1 children)

Your mistake is that after variable substitution bash does not handle quoted strings, i.e. it does not remove single quotes from sed command line. If you really need this to happen, you have to use eval:

i1xmr=$(echo "$i1p/$apiresponse*1000" | bc -l | eval $rmdec)

However using functions is a better solution in general. But in this particular case, I guess, you only need to change the bc's scale instead of using sed:

i1xmr=$(echo "scale=17; $i1p/$apiresponse*1000" | bc -l)

For better readability you may use heredoc instead of echo:

i1xmr=$( bc -l << EOF
scale=17
$i1p/$apiresponse*1000
EOF
)

Oh dear Lord, and see, this is why I do not code for a living. What I ended up doing is using a function like this

  • rmdec() { sed 's/..................$//'; }
  • i1xmr=$(echo "$i1p/$apiresponse*1000" |bc -l |rmdec)