我有一个用不同参数调用的脚本。根据这些参数的值,我检查并构建参数' 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]
我想用最新的版本号替换第一个参数,并保持脚本的其余部分不变。所以问题是:如何从函数内部更改函数的参数值?
答案 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.