问题1:我想在运行时获取数组项作为用户输入;打印项目并打印数组长度。这就是我所拥有的:
read -a myarray
echo "array items" ${myarray[@]}
echo "array length" ${#myarray[@]}
Run Code Online (Sandbox Code Playgroud)
在运行时,我给出了以下作为输入,
$ ("apple fruit" "orange" "grapes")
Run Code Online (Sandbox Code Playgroud)
输出是,
array items "apple fruit" "orange" "grapes"
array length 4
Run Code Online (Sandbox Code Playgroud)
这是不正确的。
如果我不要求用户输入而是使用作为代码的一部分声明和初始化的数组 myarray=("apple fruit" "orange" "grapes")数组长度回显为 3。所以,似乎我对 read 命令的使用不正确。
问题2:如果我在read命令中添加如下提示,
read -p "enter array items: " myarray
Run Code Online (Sandbox Code Playgroud)
第一项“苹果水果”被打印为水果“并且长度也是错误的。
如果我删除提示并添加 -a,一切都很好。如果我将 a 和 p 结合起来并将其作为 read -ap,则根本不会弹出提示。它等待没有任何消息的值。为什么会这样?有人可以向我解释什么是错的吗?
这是我的 bash 脚本计算阶乘的代码
read -p "Please enter the number " number
while ([ $number -gt 0 ])
do
factorial=1
for ((i=$number;i > 0;i--))
do
factorial=$((factorial * $i))
done
echo "The factorial of the " $number " is " $factorial
number=$((number - 1))
done
Run Code Online (Sandbox Code Playgroud)
这将打印出从 {input:1} 范围内的所有数字的阶乘,除了少数的阶乘之外,一切看起来都正确。输出如下。

如您所见,某些数字的阶乘是负值。我从在线论坛了解到 bash 脚本在计算较大数字的阶乘时通常会中断,但就我可以在线挖掘而言,这些负值似乎并不常见。如果有人可以解释其原因,它将对我的学习有很大帮助。谢谢!