What is the simplest way to remove a trailing slash from each parameter?

前端 未结 6 781
清酒与你
清酒与你 2021-01-30 05:55

What is the simplest way to remove a trailing slash from each parameter in the \'$@\' array, so that rsync copies the directories by name?

rsync -a         


        
相关标签:
6条回答
  • 2021-01-30 06:36

    In zsh you can use the :a modifier.

    export DIRECTORY='/some//path/name//'
    
    echo "${DIRECTORY:a}"
    
    => /some/path/name
    

    This acts like realpath but doesn't fail with missing files/directories as argument.

    0 讨论(0)
  • 2021-01-30 06:39

    This works for me: ${VAR%%+(/)}

    As described here http://wiki.bash-hackers.org/syntax/pattern

    May need to set the shell option extglob. I can't see it enabled for me but it still works

    0 讨论(0)
  • 2021-01-30 06:45

    You can use the ${parameter%word} expansion that is detailed here. Here is a simple test script that demonstrates the behavior:

    #!/bin/bash
    
    # Call this as:
    #   ./test.sh one/ two/ three/ 
    #
    # Output:
    #  one two three
    
    echo ${@%/}
    
    0 讨论(0)
  • 2021-01-30 06:46

    The accepted answer will trim ONE trailing slash.

    One way to trim multiple trailing slashes is like this:

    VALUE=/looks/like/a/path///
    
    TRIMMED=$(echo $VALUE | sed 's:/*$::')
    
    echo $VALUE $TRIMMED
    

    Which outputs:

    /looks/like/a/path/// /looks/like/a/path
    
    0 讨论(0)
  • 2021-01-30 06:48

    FYI, I added these two functions to my .bash_profile based on the answers found on SO. As Chris Johnson said, all answers using ${x%/} remove only one slash, these functions will do what they say, hope this is useful.

    rem_trailing_slash() {
        echo "$1" | sed 's/\/*$//g'
    }
    
    force_trailing_slash() {
        echo "$(rem_trailing_slash "$1")/"
    }
    
    0 讨论(0)
  • 2021-01-30 06:49

    realpath resolves given path. Among other things it also removes trailing slashes. Use -s to prevent following simlinks

    DIR=/tmp/a///
    echo $(realpath -s $DIR)
    # output: /tmp/a
    
    0 讨论(0)
提交回复
热议问题