I’m studying bash, and I came across this Stackoverflow thread which contains this bit of code:

var="abcde"
echo ${var%d*}

The output is abc, but I can’t figure out why. I understand that %d is used to indicate an integer number and * represents anything, but I can’t figure out why those together would truncate var to only 3 characters.

  • logging_strict@lemmy.ml
    link
    fedilink
    English
    arrow-up
    1
    arrow-down
    1
    ·
    edit-2
    9 days ago

    already answered the question

    Would like to add, don’t do this or shoulda used Python.

    Manipulating strings in bash is a mistake and creates spaghetti code. This goes for sed and awk as well.

    Python equivalent

    str_x = "abcde"
    pos = str_x.index("d")
    ret = str_x[:pos]
    print(ret)
    

    In one line, capturing the output into a bash variable

    ret=$(python -c 'str_x = "abcde"; pos = str_x.index("d"); ret = str_x[:pos]; print(ret)')

    • bbpngn
      link
      fedilink
      English
      arrow-up
      1
      ·
      6 days ago

      Thought this was a bash community

      • logging_strict@lemmy.ml
        link
        fedilink
        English
        arrow-up
        1
        ·
        4 days ago

        it’s a bash community as long as bash is the right tool for the job. For text manipulation, not so much. In Python can also do some really stupid things. Then will get advice. They’ll say, just don't do that

        Which is what i’m doing here.

        just don't do that