双引号变量使脚本失败
Double Quoted variables failing the script
我在使用引用变量调用脚本中的脚本时遇到问题。
#!/bin/sh
while getopts c:a: optionalargs
do
case $optionalargs in
c)copt=$OPTARG;;
a)aopt=$OPTARG;;
*)echo "Invalid arg";;
esac
done
if [ ! -z "$copt" ]
then
export CHAR_SET=$copt
fi
if [ ! -z "$aopt" ]
then
export ADDITIONAL_FLAGS=$aopt
fi
shift $((OPTIND -1))
/var/bin/script1.sh "${CHAR_SET}" "${ADDITIONAL_FLAGS}"
结果:
使用带引号的 /var/bin/script1.sh "${CHAR_SET}" "${ADDITIONAL_FLAGS}"
时
./a.sh -a additional -c character
too many arguments . Use -h for help
使用不带引号的 /var/bin/script1.sh ${CHAR_SET} ${ADDITIONAL_FLAGS}
时
./a.sh -a additional -c character
script runs fine
问题:
为什么双引号使我的脚本失败?它不应该防止通配吗?
在内部调用的脚本中发现了问题。它处理双引号参数并替换为单引号。所以,这真的不是问题。
我在使用引用变量调用脚本中的脚本时遇到问题。
#!/bin/sh
while getopts c:a: optionalargs
do
case $optionalargs in
c)copt=$OPTARG;;
a)aopt=$OPTARG;;
*)echo "Invalid arg";;
esac
done
if [ ! -z "$copt" ]
then
export CHAR_SET=$copt
fi
if [ ! -z "$aopt" ]
then
export ADDITIONAL_FLAGS=$aopt
fi
shift $((OPTIND -1))
/var/bin/script1.sh "${CHAR_SET}" "${ADDITIONAL_FLAGS}"
结果:
使用带引号的 /var/bin/script1.sh "${CHAR_SET}" "${ADDITIONAL_FLAGS}"
时
./a.sh -a additional -c character
too many arguments . Use -h for help
使用不带引号的 /var/bin/script1.sh ${CHAR_SET} ${ADDITIONAL_FLAGS}
时
./a.sh -a additional -c character
script runs fine
问题:
为什么双引号使我的脚本失败?它不应该防止通配吗?
在内部调用的脚本中发现了问题。它处理双引号参数并替换为单引号。所以,这真的不是问题。