如何在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 脚本中的变量?