将$ @分配给Shell函数中的另一个变量

我是一个男人

我正在制作一个智能别名gc,可以区分git commit / checkout。

如果gc被称为不带任何参数或使用-a-m参数,然后git的承诺运行。否则,将运行git checkout(如果存在b带有附加参数标志)。如果调用了gc的任何其他变体,我宁愿它引发错误而不是做意外的事情。

到目前为止,这是我的shell函数。

gc() {
    args=$@
    commit=false
    checkout=false

    # Check flags
    while getopts ":am:b" opt; do
        case $opt in
            a|m)
                commit=true
                ;;
            b)
                checkout=true
                ;;
            \?)
                echo "Unknown flags passed."
                return 1
                ;;
        esac
    done

    shift "$((OPTIND-1))"

    # Check number of arguments
    if [[ "$#" == 0 ]]; then
        commit=true
    elif [[ "$#" == 1 ]]; then
        checkout=true
    else
        echo "Too many arguments"
        return 1
    fi

    # Finally run respective command
    if [[ $commit == true && $checkout == true ]]; then
        echo "Unable to ascertain which operation you would like to perform."
        return 1
    elif [[ $commit == true ]]; then
        git commit "$args"
    elif [[ $checkout == true ]]; then
        git checkout "$args"
    else
        echo "Undefined behavior"
        return 1
    fi
}

但是,这不能正常工作。经过一些试验,我发现分配$@给另一个变量是根本原因,但我无法理解为什么以及到底出了什么问题。

另外,在我第一次编写shell函数时,请突出显示我犯的任何错误。

jesse_b

$@ 是一个数组,将其分配给一个数组:

args=("$@")

然后将其用作数组:

elif [[ $commit == true ]]; then
    git commit "${args[@]}"
elif [[ $checkout == true ]]; then
    git checkout "${args[@]}"
else

当前代码中发生的事情是所有单独的参数都存储为单个字符串。因此,如果您致电:

bc -a "foo bar"

这被分配args为:

args='-a foo bar'

然后,而不是执行:

git commit -a "foo bar"

你得到:

git commit '-a foo bar'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将另一个文件中的变量分配给类常量?

将struct的第一个变量分配给另一个

Python将值从一个变量分配给另一个

如何将一个JavaScript文件中的变量分配给另一个JS File?

为什么将函数分配给另一个变量会起作用

无法将结构变量分配给另一个结构变量

我可以将CSS变量分配给另一个变量吗?

如何将公式的值(包含变量)分配给另一个变量

如何将包含空格的变量分配给 KSH 中的另一个变量

C#将指向引用类型的变量分配给另一个变量,后者中存储了什么?

将另一个网页的特定数据分配给变量或数组

bash在操作后将变量分配给另一个

如何将变量列表分配给另一个列表

将const变量的成员分配给另一个const

PHP将php变量分配给另一个php条件

将$ PWD / *分配给另一个变量

如何将Angular @Input值分配给另一个变量并填充到子代中?

尝试将 GameObject 分配给另一个脚本中的变量(Unity C#)

C ++将函数指针分配给另一个

将函数的返回IEnumerable <MovingAverage>值分配给另一个对象

将一个分配的指针分配给另一个分配的指针

为什么将一个变量的值分配给另一个变量在python中保留在内存中?

将列表分配给另一个类中现有列表的值

将地图分配给另一个地图在golang中安全吗?

将数组子集分配给Matlab中另一个数组的成员

将数据分配给Linq中另一个List的子列表

ruby将数组分配给另一个变量,并且从该分配变量中删除元素时,也会在原始数组上删除该元素

当您知道GET变量名称的一部分时,将GET变量分配给PHP中的另一个变量

如何将函数 func 作为参数传递给另一个函数,然后将此参数分配给委托变量?