Bash 是否可以使用内置的;改为;是否使用本地、只读或声明选项?
当使用bash内置的“read”从用户输入设置变量时,是否可以将该变量设置为本地(在函数中)、只读或使用各种声明选项(例如declare-i)Bash 是否可以使用内置的;改为;是否使用本地、只读或声明选项?,bash,Bash,当使用bash内置的“read”从用户输入设置变量时,是否可以将该变量设置为本地(在函数中)、只读或使用各种声明选项(例如declare-i) 如果不是,您如何稳健地处理从用户输入读取的变量?我宁愿最小化脚本中的全局变量。如果希望变量是本地变量,可以在调用read?之前声明变量: local input read input 如果它应该是一个数组,read支持-a开关: local arr read -a arr <type>foo bar 123 输出: test.sh: li
如果不是,您如何稳健地处理从用户输入读取的变量?我宁愿最小化脚本中的全局变量。如果希望变量是本地变量,可以在调用read?之前声明变量:
local input
read input
如果它应该是一个数组,read支持-a
开关:
local arr
read -a arr
<type>foo bar 123
输出:
test.sh: line 2: foo: readonly variable
您可以使用此解决方法:(但请查看@gniourf_gniourf的评论)
您还可以读入使用-i
声明的整数变量。在这种情况下,任何非数字输入都将被解释为0
:
declare -i number
read number
<type>ABC
echo "$number" # 0
declare -i number
read number
<type>123
echo "$number" # 123
declare-i编号
读取编号
基础知识
回显“$number”#0
申报-i号
读取编号
123
回音“$number”#123
您可以稍后设置readonly属性:
local A
read A
readonly A
A=1 ## error
这是一个好的开始。它似乎适用于大多数这样的设置。它也适用于“只读”吗?我想不行,因为read会尝试向variable@labyrinth您可以做的是读取变量,然后将其声明为只读:
readinput;声明-r输入
。我不知道谁是第一个使用这个的,hek2mgl还是konsolebox,但是自从我开始使用hek2mgl进行对话后,我会使用你的。谢谢没问题:)还为其他用例添加了示例。
declare -i number
read number
<type>ABC
echo "$number" # 0
declare -i number
read number
<type>123
echo "$number" # 123
local A
read A
readonly A
A=1 ## error