我正在为正在做的一个小项目编写这段代码片段:
echo "Please enter SUID: ";
read $uid
uid_Assoc(){
arg1=$1
echo $1;
}
uid_Assoc
现在开始,我希望它提示输入一个字符串并读取该字符串。从那里我想将该字符串作为参数传递并将其回显出来。但我不确定如何将字符串作为参数传递。当我尝试执行类似以下操作时:
uid_Assoc($uid)
它抛出了语法错误(我认为这无论如何都是不正确的)。有没有什么建议可以解决此问题?
更新:我也尝试重新排列代码,使其看起来像这样:
function uid_Assoc(){
arg1=$1
echo $1;
}
echo "Please enter SUID: ";
read $uid
uid_Assoc $uid
但这似乎也不起作用。
答案1
该read
命令接受一个变量姓名,因此删除该标记:
read uid
您要做的就是:将 uid 变量的内容作为 read 命令的变量名发送。由于此值当前为空,因此您必须
echo "a prompt: "
read
这是有效的 bash 代码。“bald”读取命令的默认变量名称是REPLY
鉴于您的代码,这里进行轻微的重写:
function uid_Assoc {
local arg1=$1
echo "$arg1";
}
read -p "Please enter SUID: " uid
uid_Assoc "$uid"
笔记:
- 您不需要
function
关键字和()
语法,选择其中一个(仅代表我的观点) - 本地化函数中的变量以限制其范围
- 使用
-p
选项阅读 - 总是引用引用的变量(你永远不知道用户会输入多少个空格),除非你知道为什么您需要将变量保留在引号中。
答案2
修改脚本如下:
#!/bin/bash
echo "Please enter SUID: ";
read uid
uid_Assoc () {
arg1="$1"
echo "$1"
echo "$arg1"
}
uid_Assoc "$uid"
您只需要在调用$
中删除 uid 之前的前缀read
。