如果$FOO
设置,我想运行:
cd "$OUTPUTDIR" && fpm -s dir -t rpm \
-a x86_64 \
--epoch "${PKGEPOCH}" \
-n "${PACKAGENAME}" \
--version "${PKGVERSION}" \
--iteration "${PKGRELEASE}" \
-C "$OUTPUTDIR/installroot" \
--description="${PKGDESCRIPTION}" \
.
Run Code Online (Sandbox Code Playgroud)
如果$FOO
没有设置,我根本不想包含该标志.
如果--description=
(空),程序将失败.
但是,有时描述包括引号和其他特殊字符,所以我不想这样做:
if [[ -z "PKGDESCRIPTION" ]]; then
D=--description="${PKGDESCRIPTION}"
fi
cd "$OUTPUTDIR" && fpm -s dir -t rpm \
-a x86_64 \
--epoch "${PKGEPOCH}" \
-n "${PACKAGENAME}" \
--version "${PKGVERSION}" \
--iteration "${PKGRELEASE}" \
-C "$OUTPUTDIR/installroot" \
$D
.
Run Code Online (Sandbox Code Playgroud)
如果我把引号括起来$D
那么它就变成了一个额外的(空白)arg.
有没有办法做到这一点,如果$PKGDESCRIPTION
包含特殊字符并且不生成空白arg ,则不会成为安全问题?
使用数组是唯一理智的方法:
options=( -a x86_64 -C "$OUTPUTDIR/installroot" )
[[ $PKGEPOCH ]] && options+=( --epoch "$PGKEPOCH" )
[[ $PACKAGENAME ]] && options+=( -n "$PACKAGENAME" )
[[ $PKGVERSION ]] && options+=( --version "$PKGVERSION" )
[[ $PKGRELEASE ]] && options+=( --iteration "$PKGRELEASE" )
[[ $PKGDESCRIPTION ]] && options+=( --description="$PKGDESCRIPTION" )
cd "$OUTPUTDIR" && fpm -s dir -t rpm "${options[@]}"
Run Code Online (Sandbox Code Playgroud)
另见http://mywiki.wooledge.org/BashFAQ/050