包装另一个命令的参数
我有一个命令tool1
以这种方式解析参数:
#!/usr/bin/env bash
# ...
while [[ $# -ge 1 ]]
do
key="$1"
case $key in
-o|--option)
OPT="$2"
shift
;;
-u|--user)
USR="$2"
shift
;;
-*)
echo -e "Unrecognized option: \"$key\"" && exit 1
;;
*)
OTHERS+=("$1")
;;
esac
shift
done
# ...
我tool2
调用了tool1
。因此tool2
必须将参数传递给tool1
。它可能还需要处理相同的参数(--user
)
tool2
看起来像:
#!/usr/bin/env bash
# ...
while [[ $# -ge 1 ]]
do
key="$1"
case $key in
-O|--option2)
opt2="$2"
shift
;;
-u|--user)
USR="$2"
OTHERS+=("-u $2")
shift
;;
-*)
echo -e "Unrecognized option: \"$key\"" && exit 1
;;
*)
OTHERS+=("$1")
;;
esac
shift
done
## Call tool1 with other parameters to pass
bash tool1.sh ${OTHERS[@]}
# ...
总结一下
--option2
是仅由tool2
使用的选项。
--user
在两个工具中都很常见,tool2
也可以在调用tool1.sh
之前使用--user
。因此,在此示例中,由于数组tool1
,必须将OTHERS
显式传递给 $time = strtotime($_POST['dateInput']);
if ($time != false) {
$mydate = date('d-m-Y', $time));
}
。
我想了解处理此类参数冗余的可能和/或替代方法。一种方法,可以帮助我包装另一个工具的预期参数/选项,而无需复制/粘贴有关解析此类冗余参数/选项的行。
答案 0 :(得分:1)
tool2
的方法很好。但是,您没有正确设置OTHERS
。
-u|--user)
USR="$2"
OTHERS+=("-u" "$2")
shift
-u
及其参数需要保持独立的数组元素,就像它们是tool2
的单独参数一样。您还需要引用OTHERS
的扩展,以保留包含分词字符或整数的参数:
bash tool1.sh "${OTHERS[@]}"
最后,全大写变量名保留给shell本身使用;不要自己定义这些名字。只需使用others
代替OTHERS
。