如何在shell脚本中使用'($ var)'作为参数[重复]

Posted

技术标签:

【中文标题】如何在shell脚本中使用\'($ var)\'作为参数[重复]【英文标题】:How to use '($var)' as argument in shell script [duplicate]如何在shell脚本中使用'($ var)'作为参数[重复] 【发布时间】:2021-07-10 18:44:06 【问题描述】:

我正在尝试将参数传递给 cmdline 工具,如下所示:

./tool --device '(xyz-123)'

工具需要“()”,xyz-123 存储在变量 $var 中,我从另一个函数中获取。

如果我硬编码 '(xyz-123)',该工具可以正常工作,但是当我执行 ./tool --device '($var)' 时,它会引发错误:

  File "<string>", line 1
    tool'("xyz-123")'
                                            ^
SyntaxError: invalid syntax

【问题讨论】:

./tool --device '('"$var"')' 也可以,但是很傻。 谢谢查尔斯,这行得通!你如何解释这个? 引用是逐个字符的。因此,'(' 是单引号内的 (,然后 "$var" 根据双引号规则扩展 $var(将引用替换为命名变量的内容),然后是单引号内的 ) 【参考方案1】:

使用双引号允许变量替换:

./tool --device "($var)"

【讨论】:

该工具也需要'()'。如何将其添加到 arg 中? @KeithZhen,这个答案确实通过了()。引号真的不重要。该工具根本无法区分单引号和双引号。 @KeithZhen, ...这里要记住的是,在 UNIX 中,启动一个程序会将一个 C 字符串数组作为参数传递给它。 shell 中的'(xyz-123)'"(xyz-123)" 都变成了C 字符串"(xyz-123)"(其中"s 是C 语法的一部分,根本不是实际数据的一部分)。程序启动时无法区分它们,因为它们在内存中的表示方式完全相同。 知道了,谢谢解释!

以上是关于如何在shell脚本中使用'($ var)'作为参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 脚本文件中使用 shell 脚本中的变量?

在shell脚本中将变量的值作为命令行参数传给程序

如何从在 C 中存储 shell 脚本输出的指针获取多个字符串?

shell脚本等的操作

在容器内运行 shell 脚本

linux的shell编程中如何将一段命令的结果封装成一个变量?