我正在编写一个非常简单的脚本,调用另一个脚本,需要将当前脚本的参数传递给我要执行的脚本。
例如,我的脚本名称是foo.sh
,并调用了bar.sh
。
foo.sh:
bar $1 $2 $3 $4
如何在不显式指定每个参数的情况下完成这个操作?
我正在编写一个非常简单的脚本,调用另一个脚本,需要将当前脚本的参数传递给我要执行的脚本。
例如,我的脚本名称是foo.sh
,并调用了bar.sh
。
foo.sh:
bar $1 $2 $3 $4
如何在不显式指定每个参数的情况下完成这个操作?
这个功能很好用,但如果有空格或转义字符就会出问题。我找不到在这种情况下捕获参数并将其发送到脚本内部的方法。
这可能很有用,但看起来很丑陋。
_command_opts=$( echo "$@" | awk -F\- 'BEGIN { OFS=" -" } { for (i=2;i<=NF;i++) { gsub(/^[a-z] /,"&@",$i) ; gsub(/ $/,"",$i );gsub (/$/,"@",$i) }; print $0 }' | tr '@' \' )
"${array[@]}"
是在bash中传递任何数组的正确方式。我想提供一个完整的备忘单:如何准备参数,绕过并处理它们。
pre.sh
-> foo.sh
-> bar.sh
。
#!/bin/bash
args=("--a=b c" "--e=f g")
args+=("--q=w e" "--a=s \"'d'\"")
./foo.sh "${args[@]}"
#!/bin/bash
./bar.sh "$@"
#!/bin/bash
echo $1
echo $2
echo $3
echo $4
结果:
--a=b c
--e=f g
--q=w e
--a=s "'d'"