取消设置变量不起作用
Posted
技术标签:
【中文标题】取消设置变量不起作用【英文标题】:Unsetting variable doesn't work 【发布时间】:2017-03-23 15:07:31 【问题描述】:我想解析用户输入是否为整数,并强制他这样做。第一次 (iquant
) 运行 chkip()
有效,第二次 (idays
),我立即得到:“错误:不是数字。请重试。”然后新的输入起作用。我在break
之前取消了ipn
,所以有什么关系?
chkip()
ipn=$1
while true;
do
if [[ "$ipn" =~ ^[0-9]+$ ]] ; then
unset ipn
break
else
echo "Error: Not a number. Please retry"
read ipn
fi
done
echo "Please enter the name of the Set:"
read ap
echo "How much keys do you want to create [NUMBER]:"
read iquant
chkip $iquant
echo "How often do you want to change the Keys? [DAYS] ?:"
read idays
chkip $idayz
【问题讨论】:
您可能想要引用这些扩展("$1"
、"$iquant"
等),并考虑 set -u
在尝试使用未设置的变量时出现错误。
也许您还应该添加一个返回值,因为更正后iquant
将包含旧值,ipn
将超出范围。
欢迎来到***! +1 包括完整、独立的源代码、预期结果和实际结果。这使问题清晰、明确且易于回答和验证。
【参考方案1】:
问题是您正在阅读“idays”但传递的是“idayz”而不是前者。
read idays
chkip $idayz
将 $idayz 更改为 $idays 即可。
【讨论】:
【参考方案2】:你有一个更大的问题:你的函数只修改名为 ipn
的变量,而不是你作为参数传递的 value 的任何变量。
此函数获取变量的名称,并使用间接参数扩展来检查该变量的值。 var
的 值 被传递给 read
作为要填充的变量的名称。
chkip ()
local var=$1
until [[ $!var =~ ^[[:digit:]]$ ]]; then
read -p "Error: Not a number. Please retry: " "$var"
done
这里,变量的名称,而不是值,作为参数传递给chkip
。
read -p "Please enter the name of the set: " ap
read -p "How many keys do you want to create? [NUMBER]: " iquant
chkip iquant
read -p "How often do you want to change the keys? [DAYS]: " idays
chkip idays
【讨论】:
以上是关于取消设置变量不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用 React Hook 动态设置 GraphQL 变量不起作用