linux - 通过 bash 中的列表传递带空格的参数

标签 linux bash shell

我对在 bash 脚本中使用动态生成的参数调用某些函数很感兴趣。

但是,如果某些参数有空格,它似乎不起作用。

让我们有这个测试脚本:

#!/bin/bash
# file uu.sh
[[ -z $1 ]] || echo '$1' $1
[[ -z $2 ]] || echo '$2' $2
[[ -z $3 ]] || echo '$3' $3
[[ -z $4 ]] || echo '$4' $4
[[ -z $5 ]] || echo '$5' $5
[[ -z $6 ]] || echo '$6' $6
[[ -z $7 ]] || echo '$7' $7
[[ -z $8 ]] || echo '$8' $8
[[ -z $9 ]] || echo '$9' $9
[[ -z $0 ]] || echo '$0' $0

任何我的脚本:

#!/bin/bash
# file vv.sh
ARR=(-x)
ARR+=($1)
ARR+=("$1")
ARR+=("'$1'")
ARR+=("\"$1\"")
bash uu.sh ${ARR[*]}
echo
bash uu.sh "${ARR[*]}"

当调用 bash vv.sh "a b" 时,我得到以下结果:

$2 -x
$2 a
$3 b
$4 a
$5 b
$6 'a
$7 b'
$8 "a
$9 b"
$0 uu.sh

$1 -x a b a b 'a b' "a b"
$0 uu.sh

我期待一种将变量传递给 uu.sh 的方法,例如结果将是:

$1 -x
$2 a b
$0 uu.sh

(我可以通过调用 bash uu.sh -x a\bbash uu.sh -x "a b"bash 直接获取uu.sh -x 'a b')

最佳答案

你应该有这样的 vv.sh 才能将第二个参数中 -x 之后的所有参数传递给 uu.sh:

#!/bin/bash
# file vv.sh
ARR=(-x)    # initialize array with "-x" as first element
ARR+=("$1") # append 1st argument in second element of array
bash uu.sh "${ARR[@]}" # call uu.sh with quoted and [@]

然后将其用作(参见引用的参数):

bash vv.sh "a b"

...将作为输出发出:

$1 -x
$2 a b
$0 uu.sh

关于linux - 通过 bash 中的列表传递带空格的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43262077/

相关文章:

shell - 什么${(%):-%n} means?

linux - 使用 Bash 删除文本文件中的列?

C++ 奇怪的 RAW 套接字和 iptables 问题

bash - 为什么 Pycharm 在 .sh bash 脚本中对 "simple variable usage"发出警告?

Java - 如何检测 bash 是否已返回?

python - 子进程在使用多处理时不考虑参数

xml - 如何通过 sed 或其他方式将文件中的 [^\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFFFD\u10000-\u10FFF]+ 替换为 ""?

linux - 从 linux "date"命令中提取月份和日期

powershell - 使用 powershell 在现有 CSV 中添加列 CSV

linux 文件和文件夹不继承父目录权限