将在bash脚本中收到的选项传递给被调用的脚本,命令或内置
问题描述:
我有一个bash脚本myscript.sh
。 我的意思是从其中调用另一个脚本,命令或内置函数,例如diff
。 我的意思是将选项传递给myscript.sh
,其中一些在调用时会传递给diff
。将在bash脚本中收到的选项传递给被调用的脚本,命令或内置
我实现了这是通过getopt
设置选项字符串optstring
,然后使用
eval "diff ${optstring} ${file} ${TRG_DIR}/${filebase2}"
到目前为止,它的工作,但我不知道这是容易传递参数时,问题的方式与通配符等无论如何,...
有没有更好的方式来做到这一点?
我成立
optstring
的方式是
set -o errexit -o noclobber -o nounset -o pipefail
params="$(getopt -o qy --long brief,side-by-side,suppress-common-lines --name "$0" -- "[email protected]")"
if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; exit 1 ; fi
echo params=$params
echo [email protected]
eval set -- "$params"
optstring=""
# These variables are likely not needed
brief=false
sbs=false
scl=false
#while false ; do
while true ; do
case "$1" in
-q|--brief)
optstring=${optstring}" -q"
brief=true
echo "brief"
shift
;;
-y|--side-by-side)
optstring=${optstring}" -y"
sbs=true
echo "side-by-side"
shift
;;
--suppress-common-lines)
optstring=${optstring}" --suppress-common-lines"
scl=true
echo "suppress-common-lines"
shift
;;
--)
shift
break
;;
*)
echo "Not implemented: $1" >&2
exit 1
;;
esac
done
echo optstring=${optstring}
答
使用数组。数组可以用空格处理多字参数。初始化一个空数组:
options=()
要追加的选项,这样做:
options+=(--suppress-common-lines)
然后终于可以摆脱eval
的,当你调用diff
,只是称之为正常。确保所有报价中的情况,可变膨胀的他们有空白:
diff "${options[@]}" "$file" "$TRG_DIR/$filebase2"
我发现,当没有选择,我得到的错误'选项[@]:绑定variable'。我怎样才能摆脱它? –
https://*.com/questions/7577052/bash-empty-array-expansion-with-set-u解决了这个问题。 –