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
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    16 hours 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)')

  • beatnik86@lemmy.world
    link
    fedilink
    English
    arrow-up
    19
    ·
    2 months ago

    That’s manipulation of the string held in var. Dollar sign and curly braces wrap the variable, the single percent sign say remove the shortest matching substring from the end of the variable contents, and the ‘d*’ is the substring to match, a lowercase d followed by any characters in this instance. var will still hold the entire original string, only the echo output is modified here. You can find more documentation here, https://tldp.org/LDP/abs/html/string-manipulation.html.

  • bbpngn@lemmy.eco.br
    link
    fedilink
    English
    arrow-up
    2
    ·
    1 month ago

    You may be confusing that %d with printf syntax. I’m not entirely sure, but I think what the percent sign means is delete everything from the end of string until the first occurence of letter “d”