Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何获取用户输入,然后用用户输入的名称调用函数?_Bash_Shell - Fatal编程技术网

Bash 如何获取用户输入,然后用用户输入的名称调用函数?

Bash 如何获取用户输入,然后用用户输入的名称调用函数?,bash,shell,Bash,Shell,如何编写一个bash脚本,要求用户输入一个数字(1、2或3),用于调用名称中包含该数字的函数?之后,函数将显示一条消息,其中包含函数编号 以下是我目前掌握的情况: #!/bin/bash read -p "Enter a Number (1,2, or 3): " num function foo() { echo This message is from function $1 } foo $num 这只是一个通用函数,返回用户输入的任何内容。我只是不知道如何将用户输入的内容合并

如何编写一个bash脚本,要求用户输入一个数字(1、2或3),用于调用名称中包含该数字的函数?之后,函数将显示一条消息,其中包含函数编号

以下是我目前掌握的情况:

#!/bin/bash

read -p "Enter a Number (1,2, or 3): " num

function foo() {
   echo This message is from function $1
}

foo $num
这只是一个通用函数,返回用户输入的任何内容。我只是不知道如何将用户输入的内容合并到函数名中。与用户输入1类似,调用foo1。如果用户输入2,则调用foo2。3、调用foo3等。除了使用if-else语句和编写三个单独的函数之外,还有更好的方法吗


感谢您的帮助

可能是这样的:

#!/bin/bash

echo Enter Number:
read num

function1() { echo one; }
function2() { echo two; }

case $num in
    1)
        function$num
    ;; 
    2)
        function$num
    ;;
esac

也许是这样的:

#!/bin/bash

echo Enter Number:
read num

function1() { echo one; }
function2() { echo two; }

case $num in
    1)
        function$num
    ;; 
    2)
        function$num
    ;;
esac

当然,没有理由不能调用名称为字符串文字和变量组合的函数:

#!/bin/bash

foo1() { echo 'hello from foo1!'; }
foo2() { echo 'hello from foo2!'; }
foo3() { echo 'hello from foo3!'; }

read -p "Enter a Number (1,2, or 3): " num

if [[ $num = [123] ]]; then # validate input
  foo"$num"
fi

当然,没有理由不能调用名称为字符串文字和变量组合的函数:

#!/bin/bash

foo1() { echo 'hello from foo1!'; }
foo2() { echo 'hello from foo2!'; }
foo3() { echo 'hello from foo3!'; }

read -p "Enter a Number (1,2, or 3): " num

if [[ $num = [123] ]]; then # validate input
  foo"$num"
fi

仅数字不能在函数名中构成有效标识符。让我们知道名称与数字presentNumber之间的关系。仅数字不能在函数名中构成有效标识符。让我们知道名称与当前数字的关系,不要挑剔,但这只适用于函数的单位数索引。最好使用:if[$num=~(1 | 2 | 3)];然后#验证输入……你怎么看?@Andre这只是验证的一个基本示例-如果OP真的有
foo1
foo100
,那么我想检查该范围内的有效数字(或者更可能的是,重新考虑整体方法)会更有意义。对于问题中的基本情况,我认为
=[123]
比您的正则表达式更好(如果您打算使用正则表达式,我建议您使用
=~^[1-3]$
)。不要挑剔,但这只适用于函数的单位数索引。最好使用:if[$num=~(1 | 2 | 3)];然后#验证输入……你怎么看?@Andre这只是验证的一个基本示例-如果OP真的有
foo1
foo100
,那么我想检查该范围内的有效数字(或者更可能的是,重新考虑整体方法)会更有意义。对于问题中的基本情况,我认为
=[123]
比您的正则表达式更好(如果您打算使用正则表达式,我建议您使用
=~^[1-3]$
:)我的生活改变了!您可以使用
1 | 2)函数$num:)我的生活改变了!