linux - bash 空变量命令替换导致单引号

标签 linux bash

<分区>

以下是将空变量替换为单引号的脚本。如果变量不为空,那么我们就有了正确的替换。

$ set -x;  aa=""; bb=`curl "$aa" -vvv`; set +x
+ aa=
++ curl '' -vvv

需要注意的是用单引号代替了空变量。

当变量不为空时,一切正常,如下所示:

$ set -x;  aa="google.com"; bb=`curl "$aa" -vvv`; set +x
+ aa=google.com
++ curl google.com -vvv

Q1:为什么空变量或者带空格的变量会引入单引号? Q2:如何防止单引号代替空变量?

现在,我可以删除双引号,一切正常,但我需要保留空格(如果有的话)。

谢谢。

最佳答案

没有引入单引号,它们只是用来向您表明您正在传递一个空参数。您使用的双引号导致传递空参数。如果您不希望有参数但希望在变量中允许空格,则必须执行以下操作:

curl ${aa:+"$aa"} -vvv

当 aa 是空字符串时,这与 curl ${aa+"$aa"} -vvv 不同,但从您的描述看来您想要前者。

关于linux - bash 空变量命令替换导致单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45950291/

相关文章:

linux - 使用计算节点上的所有核心是否合理?

linux - Gstreamer-sharp,构建 libgstreamersharpglue.so

linux - 在特定字母/符号后将文件 2 中的行插入文件 1

ruby - 从 FaSTLane 将环境变量传递给 shell 脚本

bash - 通过 shell 脚本转义字符串中的美元符号

bash - 使用 bash 向配置单元脚本发送可变数量的字段

php - 与 mysql 和路径交叉检查

C 打开和读取目​​录

java - Linux 上 Java/C++ 应用程序共享内存 IPC 的良好替代方案

git - 如何使使用 git bash(触摸文件)创建的文件在 Windows 8.1 中可见?