You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell中如何向函数传递字符串变量 传参报错bad variable name解决方法

问题根源
  • 报错的核心原因是定义local string=$1时没有给$1包裹双引号,Shell执行变量展开时会默认按空白符拆分内容,实际传入带空格的参数后,该行代码等价于local string=Catch a string my friend!
  • Shell内置命令local会把后面的每一个独立字段都识别为待声明的变量,friend!不符合Shell变量命名规则,因此抛出变量名非法的报错。
  • 部分场景下交互式Shell默认开启的历史扩展功能也会对字符串中的!做特殊解析,进一步引发异常。
修复方案
  1. 函数内给变量赋值位置的参数加上双引号,避免内容拆分:
receive_string()
{
    local string="$1"         
    echo "$string"
}
  1. 如果是在交互式Shell环境调用,有两种可选方案处理感叹号的历史扩展问题:
  • 传参时用单引号包裹字符串:receive_string 'Catch a string my friend!'
  • 临时关闭历史扩展:执行set +H后再调用原命令,后续可执行set -H恢复历史扩展功能。

修复后调用即可得到预期输出:

Catch a string my friend!

内容的提问来源于stack exchange,提问作者user10869266

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 07:06:02