使用bash内置"阅读"要从用户输入设置变量,是否可以将该变量设置为本地(在函数中),只读或使用各种声明选项(例如,声明-i)?
如果没有,你如何处理从用户输入读取的变量?我最大限度地减少脚本中存在的全局变量。
答案 0 :(得分:1)
如果要将变量设置为本地变量,可以在调用read?:
之前声明变量local input
read input
如果它应该是一个数组,read支持-a
开关:
local arr
read -a arr
<type>foo bar 123
readonly
变量无法传递给read
。这是因为read
将尝试将输入数据写入变量:
readonly foo
read foo
<type> ...
输出:
test.sh: line 2: foo: readonly variable
您可以使用此解决方法:(但请查看@ gniourf_gniourf&#39;评论)
local tmp
read tmp
readonly variable="$tmp"
您可能还会读入使用-i
声明的整数变量。在这种情况下,任何非数字输入都将被解释为0
:
declare -i number
read number
<type>ABC
echo "$number" # 0
declare -i number
read number
<type>123
echo "$number" # 123
答案 1 :(得分:1)
您可以在以后设置readonly属性:
local A
read A
readonly A
A=1 ## error