Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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 - Fatal编程技术网

Bash 是否可以使用内置的;改为;是否使用本地、只读或声明选项?

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

当使用bash内置的“read”从用户输入设置变量时,是否可以将该变量设置为本地(在函数中)、只读或使用各种声明选项(例如declare-i)


如果不是,您如何稳健地处理从用户输入读取的变量?我宁愿最小化脚本中的全局变量。

如果希望变量是本地变量,可以在调用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