Bash
映射參數數組,然後轉換為字元串
假設我在腳本中有這些bash函式:
foo(){ my_args_array=("$@") export my_args="${my_args_array[@]}" bar $my_args } bar(){ echo "number of args: $#"; } foo a b 'c d e'
如果我執行上面的腳本,我會得到:
參數數量:5
但我正在尋找的是:
參數數量:3
所以我的問題是 - 有沒有辦法映射返回的值
my_args_array[@]
,所以我可以用單引號將每個元素括起來?或者做任何我需要做的事情來使 env 變數字元串看起來像原來的命令行參數。
使用數組,而不是字元串:
#!/bin/bash foo(){ my_args=("$@") bar "${my_args[@]}" } bar(){ echo "number of args: $#"; } foo a b 'c d e'
在 Bash 中,在賦值右側使用
"${array[@]}"
(or ) 有點像(or ):它將數組元素連接到單個字元串,使用空格作為分隔符。(( ) 使用 的第一個字元(字節?)。)這也適用於,等的參數。"$@"``${array[*]}``"$*"``${array[*]}``"$*"``IFS``export``declare``local
然後你有
a b c d e
inmy_args
,並且未引用的擴展分裂。如果你想要一個數組,請使用一個數組:
foo() { bar "$@" } bar() { echo "number of args: $#"; } foo a b 'c d e'
或者,如果您想要一個字元串,為了清楚起見,最好明確使用
"${array[*]}"
。