如何在linux脚本中更改函数参数的值?

时间:2014-05-13 07:19:03

标签: linux bash shell

我有一个用不同参数调用的脚本。根据这些参数的值,我检查并构建参数' SVN版本的项目。

./deploy 3281 

此命令将创建一个3281目录,并查看该项目的3281 SVN版本,并将其构建在3281目录中。

我需要创建一个关键词' HEAD'因此脚本将检查以查看最新的SVN修订版号并为其创建一个文件夹(例如:3282),然后签出项目的头版本并在那里构建它。

我找到了如何使用svn获取最新版本号(svn info -r' HEAD' --username jse http://jse@svn.ctsvpn.com/repos/Teleena/ | grep Revision | egrep -o" [0 -9] +")我试图简单地实现一个if if:

 #check to see if latest/head revision is called
        if [ "$1" == "head" ]; then
                #get latest revision number
                HEADREV=$(svn info -r 'HEAD' --username jse http://jse@svn.ctsvpn.com/repos/Teleena/ | grep Revision | egrep -o "[0-9]+")
                echo "=========================================="
                echo "= Revision number: $HEADREV will be used ="
                echo "=========================================="
                #change swap the second parameter
                $1=$HEADREV  #<-- IS THIS CORRECT?
        fi
...[rest of program here]

我想用最新的版本号替换第一个参数,并保持脚本的其余部分不变。所以问题是:如何从函数内部更改函数的参数值?

1 个答案:

答案 0 :(得分:4)

您可以使用set内置来更改位置参数。

以下代码段将第一个位置参数(即$1)更改为something

set -- "something" "${@:2}"

例如,请参阅以下内容:

echo "Original parameters: $@"
set -- "something" "${@:2}"
echo "Modified parameters: $@"

假设将其放在名为script的脚本中,并通过说bash script foo bar baz来调用,则输出:

Original parameters: foo bar baz
Modified parameters: something bar baz

引自help set

  

set: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]

 Set or unset values of shell options and positional parameters.