Bash函数调用传入变量名输出变量名而非值,如何正确传递变量值?
Bash函数传参输出变量名而非值的解决方法
问题原因
你调用myfunc ts时,传给函数的是字符串"ts",不是变量ts的实际值,所以函数内的$1接收的就是这个字符串,自然输出"ts"。
解决方案一:直接传递变量值
调用函数时,用$ts替代ts,这样就会把变量的内容作为参数传入:
#!/usr/bin/sh myfunc() { local ts=$1 echo $ts } ts=`date +%s` echo $ts # 这里用$ts传递变量值 myfunc $ts
运行后就能输出变量的实际值,和第一个echo结果一致。
解决方案二:传递变量名并间接引用(适合动态场景)
如果你的需求是传递变量名,然后在函数内部获取它的值,可以用Bash的间接引用语法${!变量名}:
#!/usr/bin/sh myfunc() { # 接收变量名,通过间接引用获取值 local var_name=$1 local var_value=${!var_name} echo $var_value } ts=`date +%s` echo $ts # 传递变量名ts myfunc ts
这种方式适合需要动态操作不同变量的场景,比如根据传入的变量名获取对应的值。
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

