Shell脚本函数问题

Shell脚本函数问题

我正在为正在做的一个小项目编写这段代码片段:

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

相关内容