如何将一个 bash 脚本中的参数数组传递给另一个其中一些参数有空格的脚本
How to pass array of arguments in one bash script to another where some arguments have spaces
我正在编写一个 bash 脚本,该脚本生成要传递给另一个外部脚本的参数列表。此参数列表可以包含带空格的字符串。请注意,此参数列表的长度将根据脚本的不同而有所不同 运行.
bash 脚本如下所示:
#!/bin/bash
# script1.sh
... some code that populates the array ARGS_TO_PASS ...
# NOTE! ARGS_TO_PASS can be of varying length depending on what the above code does.
#
# Here is example of what ARGS_TO_PASS might be:
# ARGS_TO_PASS=(a b c 'the quick brown fox')
# Now, call script2.sh on ARGS_TO_PASS.
script2.sh ${ARGS_TO_PASS[*]}
这是第二个脚本:
#!/bin/bash
# script2.sh
while [[ $# -gt 0 ]]; do
echo "parsing arg: "
shift
done
如果 script1.sh
的最后一行是 script2.sh ${ARGS_TO_PASS[*]}
,则输出如下所示:
parsing arg: a
parsing arg: b
parsing arg: c
parsing arg: the
parsing arg: quick
parsing arg: brown
parsing arg: fox
如果 script1.sh
的最后一行是 script2.sh "${ARGS_TO_PASS[*]}"
,则输出如下所示:
parsing arg: a b c 'the quick brown fox'
这两个都不是我想要的。我想要的输出是这样的:
parsing arg: a
parsing arg: b
parsing arg: c
parsing arg: the quick brown fox
有什么办法吗?
您可以使用
script2.sh "${ARGS_TO_PASS[@]}"
我正在编写一个 bash 脚本,该脚本生成要传递给另一个外部脚本的参数列表。此参数列表可以包含带空格的字符串。请注意,此参数列表的长度将根据脚本的不同而有所不同 运行.
bash 脚本如下所示:
#!/bin/bash
# script1.sh
... some code that populates the array ARGS_TO_PASS ...
# NOTE! ARGS_TO_PASS can be of varying length depending on what the above code does.
#
# Here is example of what ARGS_TO_PASS might be:
# ARGS_TO_PASS=(a b c 'the quick brown fox')
# Now, call script2.sh on ARGS_TO_PASS.
script2.sh ${ARGS_TO_PASS[*]}
这是第二个脚本:
#!/bin/bash
# script2.sh
while [[ $# -gt 0 ]]; do
echo "parsing arg: "
shift
done
如果 script1.sh
的最后一行是 script2.sh ${ARGS_TO_PASS[*]}
,则输出如下所示:
parsing arg: a
parsing arg: b
parsing arg: c
parsing arg: the
parsing arg: quick
parsing arg: brown
parsing arg: fox
如果 script1.sh
的最后一行是 script2.sh "${ARGS_TO_PASS[*]}"
,则输出如下所示:
parsing arg: a b c 'the quick brown fox'
这两个都不是我想要的。我想要的输出是这样的:
parsing arg: a
parsing arg: b
parsing arg: c
parsing arg: the quick brown fox
有什么办法吗?
您可以使用
script2.sh "${ARGS_TO_PASS[@]}"