我感兴趣的是在 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
Run Code Online (Sandbox Code Playgroud)
任何我的脚本:
#!/bin/bash
# file vv.sh
ARR=(-x)
ARR+=($1)
ARR+=("$1")
ARR+=("'$1'")
ARR+=("\"$1\"")
bash uu.sh ${ARR[*]}
echo
bash uu.sh "${ARR[*]}"
Run Code Online (Sandbox Code Playgroud)
打电话时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
Run Code Online (Sandbox Code Playgroud)
我期待一种将变量传递给 uu.sh 的方法,例如结果是:
$1 -x
$2 a b
$0 uu.sh
Run Code Online (Sandbox Code Playgroud)
(我可以通过调用bash uu.sh -x a\ b
、 或bash 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 [@]
Run Code Online (Sandbox Code Playgroud)
然后将其用作(参见引用的参数):
bash vv.sh "a b"
Run Code Online (Sandbox Code Playgroud)
...它将作为输出发出:
$1 -x
$2 a b
$0 uu.sh
Run Code Online (Sandbox Code Playgroud)