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/…$//’)
  • @bizdelnick
    link
    3
    edit-2
    5 months ago

    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
    )
    
    • @shortwavesurfer@monero.townOP
      link
      fedilink
      English
      16 months ago

      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)