linux - 如何在数组中存储包含双引号的命令参数?

标签 linux bash shell unix

我有一个 Bash 脚本,它可以生成、存储和修改数组中的值。这些值稍后用作命令的参数。

对于 MCVE,我想到了任意命令 bash -c 'echo 0="$0"; echo 1="$1"' 这解释了我的问题。我将使用两个参数 -option1=withoutspace-option2="with space" 调用我的命令。所以它看起来像这样

> bash -c 'echo 0="$0" ; echo 1="$1"' -option1=withoutspace -option2="with space"

如果对命令的调用直接键入到 shell 中。它打印

0=-option1=withoutspace
1=-option2=with space

在我的 Bash 脚本中,参数是数组的一部分。然而

#!/bin/bash
ARGUMENTS=()
ARGUMENTS+=('-option1=withoutspace')
ARGUMENTS+=('-option2="with space"')
bash -c 'echo 0="$0" ; echo 1="$1"' "${ARGUMENTS[@]}"

打印

0=-option1=withoutspace
1=-option2="with space"

仍然显示双引号(因为它们是按字面解释的?)。有效的是

#!/bin/bash
ARGUMENTS=()
ARGUMENTS+=('-option1=withoutspace')
ARGUMENTS+=('-option2=with space')
bash -c 'echo 0="$0" ; echo 1="$1"' "${ARGUMENTS[@]}"

再次打印

0=-option1=withoutspace
1=-option2=with space

我需要更改什么才能使 ARGUMENTS+=('-option2=with space"')ARGUMENTS+=('-option2=with space') 一样工作

(也许将命令的参数存储在数组中甚至是完全错误的?我愿意接受建议。)

最佳答案

去掉单引号。与在命令行上完全一样地编写选项。

ARGUMENTS+=(-option1=withoutspace)
ARGUMENTS+=(-option2="with space")

请注意,这与您的第二个选项完全相同:

ARGUMENTS+=('-option1=withoutspace')
ARGUMENTS+=('-option2=with space')

-option2="with space"'-option2=with space' 均计算为同一字符串。它们是同一事物的两种写法。

(Maybe it's even entirely wrong to store arguments for a command in an array? I'm open for suggestions.)

这是正确的做法。数组非常适合于此。使用扁弦将是一个错误。

关于linux - 如何在数组中存储包含双引号的命令参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47665076/

相关文章:

bash - 将 ed25519 私钥转换为 RSA 私钥

linux - 启动脚本失败并出现错误 "-e: invalid option",缺少什么?

linux - 可以在 curl 配置文件中使用 GET 和 POST

bash - svn 从 bash 脚本提交而不打开编辑器

shell - Linux 上 find 命令的并行版本

php - Magento FPC Cache Warm 与用户组、wget、Lesti FPC

c - 如何在 ubuntu 服务器中为 STREAMS 安装 IOCTL 手册页?

c - Linux 中的守护进程日志记录

linux - Bash 从文本文件输入数据并处理它

java - jar 在 unix 和 linux 中的行为是否不同?