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@lemmy.ml
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    1 year 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
    )
    

    P. S. Stupid lemmy replaces “<<” with &lt;&lt;. Correct script is:

    • i1xmr=$( bc -l << EOF
    • scale=17
    • $i1p/$apiresponse*1000
    • EOF
    • )
    • shortwavesurfer@monero.townOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year 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)