【问题标题】:Parsing command line arguments in a shell script function在 shell 脚本函数中解析命令行参数
【发布时间】:2018-12-23 08:43:26
【问题描述】:

shell 命令行参数列表 $@ 不打印任何内容。所以我在 ALL_ARGS_PASSED 中获取了 args 并将它们发送到函数中。即使这样,我也无法解析参数。

解析 $@(所有命令行参数的列表)

将它们设置在 ALL_ARGS_PASSED 中并尝试在函数中解析

ALL_PASSED_ARGS="$@"

get_args_rethink()
{
   #echo $ALL_PASSED_ARGS
   echo "All args passed $@"
   for arg in $ALL_PASSED_ARGS
   do
       KEY=$(echo $arg | cut -f1 -d=)
       VALUE=$(echo $arg | cut -f2 -d=)

       case "$KEY" in
           GIT_USERNAME)                     READ_GIT_USERNAME=${VALUE} ;;
           GIT_PASSWORD)                     READ_GIT_PASSWORD=${VALUE} ;;
           *)                                echo "PLEASE SEE USAGE"  ;;
       esac
   done
}

get_args_rethink aa=1 bb=2
echo "$READ_GIT_USERNAME first parameter"
echo "$READ_GIT_PASSWORD second parameter"

期望 ALL_ARGS_PASSED 包含所有参数 这需要成功解析。

【问题讨论】:

    标签: shell


    【解决方案1】:

    函数可以传递参数。所以 $@ inside function 成为函数 args 而不是命令行中的 shell 参数。

    ALL_ARGS_PASSED="$@" 错误 $@ 已被引用 args 列表。如果你再次引用它变成单个字符串,因此只有第一个参数被解析,其余的都是值。

    ""aa=1 bb=2 cc=3"" 所以如果你解析这个 aa 是 key 并且 value 是 "1 bb=2 cc=3"

    所以解决方案不是引用 ALL_ARGS_PASSED

    ALL_PASSED_ARGS=$@
    

    【讨论】:

    • $@ 复制到另一个变量会破坏任何引用。您想将 "$@" 作为参数传递给函数,而不是正确地保留所有参数并完整地引用。
    猜你喜欢
    • 2011-03-26
    • 2013-03-03
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2010-09-07
    • 2016-12-17
    • 1970-01-01
    相关资源
    最近更新 更多