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/…$//’)
  • Xyre@lemmus.org
    link
    fedilink
    English
    arrow-up
    5
    ·
    1 year ago

    You’re assigning rmdec to the output of sed. It should work if you wrap it as you did with i1xmr.

    • shortwavesurferOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      Yeah, my goal is to shorten that sed command to that variable. It seems like it would work, but nope. It throws errors

      • Andy@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        It might be because it’s a single string, and might work if you store it or expand it as an array. I think it would in Zsh, anyway.

        But the response to use a function instead is probably wiser.

        • brie@beehaw.org
          link
          fedilink
          arrow-up
          3
          ·
          1 year ago

          Strings work fine, the problem is the (single) quotes:

          ~ $ foo="echo 'hello world'"
          ~ $ for x in $foo; do echo $x; done
          echo
          'hello
          world'
          ~ $ $foo
          'hello world'
          ~ $ eval "$foo"
          hello world
          

          The splitting is by whitespace, so the single quotes remain in the arguments. Using eval (and double quotes to preven splitting), it gets processed correctly. That said, don’t use eval; use functions or aliases instead.

        • shortwavesurferOP
          link
          fedilink
          English
          arrow-up
          1
          ·
          1 year ago

          Yep, the function did the trick. My guess is it was being misread at execution as a variable and thats why it was breaking