我想使用read
从用户那里获得输入read line
并且正确的输入将是一个字符串,然后是一个数字:
a 5
b 6
+ 87
你如何分开" a"和5成两个变量,用5变成一个整数变量?
答案 0 :(得分:2)
read
支持命令行选项-a
,将输入存储在如下数组中:
$ read -a line
a 4
$ echo ${line[0]}
a
$ echo ${line[1]}
4
在我看来,这比使用两个变量更好。
答案 1 :(得分:0)
我建议您阅读read
的文档,以帮助您入门:
help read
以下是前两段:
从标准输入中读取一行并将其拆分为字段。
从标准输入或文件描述符FD中读取单行 如果提供了-u选项。该行与单词一样分为字段 分裂,第一个单词分配给第一个NAME,第二个单词分配给第一个NAME 单词到第二个NAME,依此类推,分配给任何剩余的单词 最后一个名字。只有在$ IFS中找到的字符才会被识别为单词 分隔符。
请注意,bash没有与其他编程语言相当的“整数变量”概念。 Bash variables are untyped.使用declare -i
将变量声明为整数只会影响对此变量的赋值 - 所有不是有效整数的内容都会静默设置为0
。
答案 2 :(得分:0)
我认为你在shell中操作,因为这篇文章被标记为“bash”,但你可能想要明确这一点。
无论如何,shell的“read”命令需要多个变量名,而不只是一个。你可以给它两个,它会在相应的变量中将每个单词交给你。 (它们在IFS变量给出的字段分隔符上拆分。)
在一般情况下,shell在“整数”变量和任何其他类型之间没有任何区别。
如果您真的想了解如何正确编写shell脚本,我建议您完全阅读shell的手册页。
答案 3 :(得分:0)
read
命令会将您的输入与$IFS
中的任何内容分开。默认情况下,这是空格,所以只需这样做:
read my_string my_number
会将您的输入拆分为由空格分隔的两个部分。有时候,你会看到这个:
read my_string my_number garbage
因为无论你有多少参数,read都会将整行的其余部分读入最后一个变量。例如,如果我有:
read my_string my_number
用户输入:
this 1 foo foo foo!
$my_string
将为this
,但$my_number
将为1 foo foo foo!
通过添加另一个变量(在这种情况下称为garbage
),我消除了这个问题。如果我把:
read my_string my_number garbage
用户输入:
this 1 foo foo foo!
$my_string
将为this
,$my_number
将为1
,$garbage
将为foo foo foo!
。
一个简单的测试程序:
while read my_string my_number garbage
do
echo "The string is '$my_string'. The number is '$my_number'."
echo "Note there's no error checking of input."
echo "That's your job, Bunky."
done