将 bash 脚本中接收到的选项传递给调用的脚本、命令或内置
Pass options received in bash script to a called script, command or builtin
我有一个 bash 脚本 myscript.sh
。
我的意思是从其中调用另一个脚本、命令或内置函数,例如 diff
。
我的意思是将选项传递给 myscript.sh
,其中一些会在调用时传递给 diff
。
我实现这个的方法是通过 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 "[=12=]" -- "$@")"
if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; exit 1 ; fi
echo params=$params
echo params=$@
eval set -- "$params"
optstring=""
# These variables are likely not needed
brief=false
sbs=false
scl=false
#while false ; do
while true ; do
case "" 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: " >&2
exit 1
;;
esac
done
echo optstring=${optstring}
使用数组。数组可以处理带有空格的多字参数。初始化一个空白数组:
options=()
要附加选项,请执行:
options+=(--suppress-common-lines)
然后你终于可以在调用 diff
时去掉 eval
并正常调用它。确保引用所有变量扩展以防它们有空格:
diff "${options[@]}" "$file" "$TRG_DIR/$filebase2"
我有一个 bash 脚本 myscript.sh
。
我的意思是从其中调用另一个脚本、命令或内置函数,例如 diff
。
我的意思是将选项传递给 myscript.sh
,其中一些会在调用时传递给 diff
。
我实现这个的方法是通过 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 "[=12=]" -- "$@")"
if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; exit 1 ; fi
echo params=$params
echo params=$@
eval set -- "$params"
optstring=""
# These variables are likely not needed
brief=false
sbs=false
scl=false
#while false ; do
while true ; do
case "" 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: " >&2
exit 1
;;
esac
done
echo optstring=${optstring}
使用数组。数组可以处理带有空格的多字参数。初始化一个空白数组:
options=()
要附加选项,请执行:
options+=(--suppress-common-lines)
然后你终于可以在调用 diff
时去掉 eval
并正常调用它。确保引用所有变量扩展以防它们有空格:
diff "${options[@]}" "$file" "$TRG_DIR/$filebase2"