我有一个脚本,其中需要对用户输入进行多次评估,我正在研究的解决方案是将评估位放入一个函数中,并在每次需要评估输入时简单地调用该函数。
问题是当我尝试更新时$1
变量(指函数的第一个变量参数)我收到错误消息“$VARIABLE 命令未找到”。
这是代码:
function input_handler() {
if is_integer $1; then
selid="$1 -1"
if [[ "$1" -le "0" ]]; then
echo "Please use a simple positive number!"
else
if [[ "$1" -le "${#array[*]}" ]]; then
eval $1="${array[selid]}"
echo "Ok, moving on..."
else
echo "That number seems too large, try again?"
fi
fi
else
if [ -e $2/$1 ]; then
echo "Ok, moving on..."
else
echo "That item is not on the list, try again!"
fi
fi
}
这个命令:
input_handler $doctype $docpath
给出这个输出:
5
./test: line 38: 5=sun: command not found
好的,继续...
现在这几乎是正确的,但我之后的是 doctype=sun,而不是 5=sun,换句话说,我需要$1
变量名不是它的值。改变线路eval $1="${array[selid]}"
to eval doctype="${array[selid]}"
修复了这个特定的实例。但这并不能解决我的问题,因为我需要在具有不同名称的不同变量上运行此函数。
也许不完全理解您想要实现的目标,但请检查下一个示例:
weirdfunc () {
echo " weirdfunc: variable name is: $1"
echo " weirdfunc: variable value is: ${!1}"
eval "$1=$(( ${!1} + 1))" #assign
}
myvar="5"
echo "the value of myvar before: $myvar"
weirdfunc myvar #call with the NAME not with the value, so NOT weridfunc $myvar
echo "the value of myvar after: $myvar"
简而言之 - 当你想对变量做任何事情时NAME在被调用的函数中,您应该传递变量的名称而不是他的值。所以调用函数
somefunc NAME
代替
somefunc $NAME
并使用上述构造来获取函数内的名称和值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)