我如何通过双引号--参数值“;bash中的字符串
编辑:问题被标记为重复,请注意,值是以特定方式发送的,带有双引号,如我如何通过双引号--参数值“;bash中的字符串,bash,shell,unix,whitespace,quotes,Bash,Shell,Unix,Whitespace,Quotes,编辑:问题被标记为重复,请注意,值是以特定方式发送的,带有双引号,如“--parameter value”“--parameter 2 value2”此问题未被询问,也没有答案 问题 如果参数被双引号引用,比如“--parameter value”“--parameter2 value2”,我如何传递它们,以便最终脚本可以将其作为--parameter value--parameter2 value 如果我尝试$@(不带双引号),则仅当参数值不包含空格时才有效。如果我尝试“$@”它根本不起作用。
“--parameter value”“--parameter 2 value2”
此问题未被询问,也没有答案
问题
如果参数被双引号引用,比如“--parameter value”“--parameter2 value2”
,我如何传递它们,以便最终脚本可以将其作为--parameter value--parameter2 value
如果我尝试$@
(不带双引号),则仅当参数值不包含空格时才有效。如果我尝试“$@”
它根本不起作用。请参阅下面解释三个文件问题的场景
现实生活场景
action.yml
)调用带有双引号的参数名称和值对的Dockerfile
“--parameter value”“--parameter 2 value2”Dockerfile
在其入口点调用一个shell脚本,该脚本期望参数为--参数值--参数2值2
(每个参数名称/值对不带双引号)middleman.sh
和script.sh
。我只控制着中间人
呼叫者
入口点脚本。它以特定的方式调用中间人
,其中每个参数名称和值都是双引号我无法控制此脚本的行为。
因此,我们可以用caller.sh
表示它,如下所示:
#/usr/bin/env bash
./middleman.sh--parameter1值“”--parameter2“带空格的值”
中间人
这是中间层,应该从调用方
获取参数,并将它们转换为脚本所期望的扩展参数
middleman.sh
:
#/usr/bin/env bash
./script.sh“$@”
这就是问题所在,因为这不起作用。我还尝试了不带双引号的$@
,但只有当参数值包含空格时,它才起作用。我怎么能在这里打对电话
剧本
脚本应该以正确的方式获取参数。它希望接收参数,如--name-value
其工作原理是按如下方式解析参数,例如打印参数:
script.sh
:
#/usr/bin/env bash
而[[“$#””-gt 0];请把一美元放在箱子里
--参数1)第一个参数=“2”;移位;;
--参数2)第二个参数=“2”;移位;;
*)echo“[script.sh]传递的未知参数:'$1';出口1;;
以撒;转移;完成
echo“[script.sh]参数1:$FIRST_PARAM,second参数:$second_PARAM”
我无法修改此脚本
运行测试
/caller.sh
如何传递它们,以便最终脚本可以将其作为--参数值--参数2值
正常通过:
./middleman.sh --parameter1 value --parameter2 'value with whitespace'
我怎么能在这里打对电话
提供的代码是正确的,只是:
./script.sh "$@"
有关更多信息,请在shell中进行分词扩展和引用。这不是你如何传递参数,而是你如何“转发”和“解析”它们——而“$@”
是正确的方法
旁注:案例
是特殊的-案例
中的$1
不进行分词,因此无需引用。我喜欢引用所有扩展,并且无论如何都会在中写入案例“$1”
使用shellcheck.net检查脚本
aa和。嗨,非常感谢!但是我不能改变caller.sh的行为,它是静态的,不幸的是它总是在引号中调用参数名和值对。我用现实生活场景更新了这个问题。那么我如何“规范化”这些引用的参数呢?顺便说一句,我的问题是关闭的,因为重复。这个问题以前从未被提出过。。。?您不控制github操作吗<代码>如何“规范化”这些引用的参数?
编写解析器。现在你也改变了报价。因此,编写一个解析器——在第一个空格之前和之后提取字符串,从这两个字符串中创建两个参数,并沿长度传递它们。像解析这样的简单解决方案,我无法坚持使用$@
。很抱歉,我对这些引文不够清楚。我正在使用action.yml
(自己的操作),它总是通过引用键/值参数对使用其args
调用Dockerfile。我提出了这个解决方案,以支持正常参数输入和双引号输入。它工作正常:。我希望得到反馈,否则请随时更新您的答案,我会接受。我希望得到反馈
Nice script;)我会合并它。