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

Linux Shell脚本函数传参问题:带引号句子无法正确识别

Shell函数传递含空格参数的问题解决方法

你的问题核心在于Shell变量展开时的分词规则:当你执行print ${test}时,Shell会先把${test}替换成foo, "this is foo bar",然后按空白字符(空格、制表符等)分割成多个参数,这里的引号只是普通字符串,不会被当作参数边界的语法符号,所以最终传递给print的参数是foo,、"this、is、foo、bar,这就导致了错误的输出。

正确的解决方式

直接给函数传递独立的带引号参数,不要把多个参数拼接成一个字符串:

#!/bin/sh

print ()
{
  # 注意用双引号包裹$1、$2,避免参数内的空格被分割
  echo "$1"
  echo "$2"
}

sentence="this is foo bar"
# 直接传递两个独立的带引号参数
print "foo," "${sentence}"

运行结果

执行修改后的脚本,会得到你期望的输出:

foo,
this is foo bar

补充说明

如果确实需要预先存储多个参数(比如参数数量不固定的场景),在支持数组的Shell(如bash)中可以用数组来存储:

#!/bin/bash

print ()
{
  echo "$1"
  echo "$2"
}

sentence="this is foo bar"
# 用数组存储多个参数
args=("foo," "${sentence}")
# 用数组展开传递参数
print "${args[@]}"

这种方式可以灵活处理任意数量的参数,每个数组元素对应一个函数参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:46:08