Shell script - remove first and last quote (") from a variable

后端 未结 15 1765
刺人心
刺人心 2020-11-30 16:47

Below is the snippet of a shell script from a larger script. It removes the quotes from the string that is held by a variable. I am doing it using sed, but is it efficient?

15条回答
  •  长情又很酷
    2020-11-30 17:35

    My version

    strip_quotes() {
        while [[ $# -gt 0 ]]; do
            local value=${!1}
            local len=${#value}
            [[ ${value:0:1} == \" && ${value:$len-1:1} == \" ]] && declare -g $1="${value:1:$len-2}"
            shift
        done
    }
    

    The function accepts variable name(s) and strips quotes in place. It only strips a matching pair of leading and trailing quotes. It doesn't check if the trailing quote is escaped (preceded by \ which is not itself escaped).

    In my experience, general-purpose string utility functions like this (I have a library of them) are most efficient when manipulating the strings directly, not using any pattern matching and especially not creating any sub-shells, or calling any external tools such as sed, awk or grep.

    var1="\"test \\ \" end \""
    var2=test
    var3=\"test
    var4=test\"
    echo before:
    for i in var{1,2,3,4}; do
        echo $i="${!i}"
    done
    strip_quotes var{1,2,3,4}
    echo
    echo after:
    for i in var{1,2,3,4}; do
        echo $i="${!i}"
    done
    

提交回复
热议问题