【问题标题】:Parsing bash function parameters解析bash函数参数
【发布时间】:2013-05-11 02:05:37
【问题描述】:

我有一个 bash 函数,比如foo ()

我在user=user1 pass=pwd address=addr1 other= 之类的字符串中传递了一些参数 参数可能会丢失或以随机顺序传递 我需要在 foo 中分配适当的值

USER=...
PASSWORD=...
ADDRESS=...

我该怎么做?

我可以多次使用grep,但是这种方式不好,例如

foo ()
{
  #for USER
  for par in $* ; do 
    USER=`echo $par | grep '^user='` 
    USER=${USER#*=} 
  done
  #for PASSWORD
  for ...
}

【问题讨论】:

    标签: bash function parameter-passing string-parsing


    【解决方案1】:

    这是你的意思吗?

    #!/bin/sh
    # usage: sh tes.sh username password addr
    
    # Define foo
    # [0]foo [1]user [2]passwd [3]addr
    foo () {
        user=$1
        passwd=$2
        addr=$3
        echo ${user} ${passwd} ${addr}
    }
    
    # Call foo
    foo $1 $2 $3
    

    结果:

    $ sh test.sh username password address not a data
    username password address
    

    您的问题也已在此处得到解答:

    Passing parameters to a Bash function


    显然上述答案与问题无关, 那么这个怎么样?

    #!/bin/sh
    
    IN="user=user pass=passwd other= another=what?"
    
    arr=$(echo $IN | tr " " "\n")
    
    for x in $arr
    do
        IFS==
        set $x
        [ $1 = "another" ] && echo "another = ${2}"
        [ $1 = "pass" ] && echo "password = ${2}"
        [ $1 = "other" ] && echo "other = ${2}"
        [ $1 = "user" ] && echo "username = ${2}"
    done
    

    结果:

    $ sh test.sh
    username = user
    password = passwd
    other =
    another = what?
    

    【讨论】:

    • 不完全,参数集没有严格排序。我可以通过address=addr1 pass=pwd user=user1 other= 或者只是错过一些参数。所以 USER 可能是 $1 或 $2 或其他
    • 我的错。但是您应该将这些详细信息添加到您的问题中
    • 谢谢,这很好!但我确实使用了自己的解决方案。仅供参考params=`echo $* | tr " " "\n"` ; USER=`echo $params | grep ^user=`USER=${USER#*=} ; PASSWORD=`echo $params | grep ^pass=` ; PASSWORD=${PASSWORD#*=}`
    猜你喜欢
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多