我正在更改一个具有如下结构的bash脚本:
#somewhere in the code
sim_counts=#... some value
function_name()
{
set $sim_counts
for hostname in $linux_hostnames; do
if [ $1 -eq 0 ]; then # if sim_counts equal 0
shift # jump forward in sim_counts
continue
fi
# ... more code
shift
done
}
然后在脚本中调用它:
function_name
我想在这个函数中引入一个参数:
#somewhere in the code
sim_counts=#... some value
function_name()
{
ip=$1
set $sim_counts
for hostname in $linux_hostnames; do
if [ $1 -eq 0 ]; then # if sim_counts equal 0
shift # jump forward in sim_counts
continue
fi
# ... more code
shift
done
}
并按以下方式调用该函数:
function_name 10.255.192.123
我应该怎么做才能避免$1
函数参数冲突和set
命令中的其他值?
答案 0 :(得分:2)
如果我正在阅读Bash参考手册中的set builtin page,我相信您编写的代码将正常工作。从该页面引用:
其余N个参数是位置参数,按顺序分配给$ 1,$ 2,... $ N.特殊参数#设置为N。
实质上,位置变量的任何预先存在的值都将被吹走。该手册页的第一句话也很有趣:
这个内置非常复杂,值得拥有自己的部分。
简而言之,我认为您的代码应该按预期工作。您已将$1
的初始值(从函数调用中)保存到临时变量中;只要你提到$ip
这个特定的值,你应该是好的。在我自己的测试脚本中,似乎$1
会像我预期的那样被吹走。