gpt4 book ai didi

bash - 如何将 foo ='bar baz' 传递给来自 cli 参数的命令

转载 作者:行者123 更新时间:2023-12-04 08:51:45 26 4
gpt4 key购买 nike

这是我正在尝试做的一个精简的例子。

#!/usr/bin/env bash
set -x

echo "$@"
调用它
bash script -vv --foo='bar baz'
产量
+ echo -vv 'foo=bar baz'
-vv foo=bar baz
请注意,+ 行(即调试行)在整个 foo=bar baz 周围放置了单引号。我需要它通过
foo='bar baz'
不是
'foo=bar baz'
我尝试了几次迭代都无济于事。
有没有办法让它通过前者?

最佳答案

set -x不会更改参数中的引号:foo='bar baz''foo=bar baz'是写同一个字符串的两种不同方式。您传递这些参数的任何程序都将被赋予 C 字符串 "foo=bar baz" (那些双引号是 C 语法,不是文字内容)在其 argv 数组中的相关位置。请注意,没有 ' s 在该字符串中的任何位置。
这是真的,因为所有 POSIX shell(一个 bash 是其中的成员的类)都在每个字符的基础上评估引用;和语法引号在实际执行之前被删除,因此只留下文字数据。
foo='bar baz' , 你有 foo=在未引用的上下文中和 bar baz在单引号上下文中连接在一起成为一个字符串。
'foo=bar baz' ,shell 的调试输出显示一个包含该操作结果的字符串。
这些字符串是相同的;它们只是碰巧使用不同的语法进行描述。因此,这两种表示之间的区别不可能导致任何错误,因为它们导致传递给被调用程序的值完全相同; 被调用的程序无法分辨使用了哪个,因此无法根据区别改变其行为。因此,基于这种区别的错误是不可能的。

关于bash - 如何将 foo ='bar baz' 传递给来自 cli 参数的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64065544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com