取消设置变量不起作用

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

【讨论】:

以上是关于取消设置变量不起作用的主要内容,如果未能解决你的问题,请参考以下文章

通过引用取消设置会话不起作用

取消选中 jquery 中具有相同类名的复选框不起作用

使用 React Hook 动态设置 GraphQL 变量不起作用

取消后 UIActivityViewController 不起作用

如何解决java环境变量设置不起作用的问题

取消本地通知不起作用