启用set -x时,shell输出中包含单引号

时间:2017-11-23 11:51:20

标签: shell

使用set -x时遇到问题。

#!/bin/sh
#set -x

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))

echo OP_C = "${CHAR_SET}"
echo OP_A = "${ADDITIONAL_FLAGS}"

结果:

使用set -x

./a.sh -a additional -c character
OP_C = 'character'
OP_A = 'additional'

评论set -x

./a.sh -a additional -c character
OP_C = character
OP_A = additional

问题:

启用set -x后,为什么单引号会包含在结果中?

1 个答案:

答案 0 :(得分:0)

无法重现。这是我从启用了set -x的/ bin / sh获得的输出:

+ getopts c:a: optionalargs
+ case $optionalargs in
+ aopt=additional
+ getopts c:a: optionalargs
+ case $optionalargs in
+ copt=character
+ getopts c:a: optionalargs
+ '[' '!' -z character ']'
+ export CHAR_SET=character
+ CHAR_SET=character
+ '[' '!' -z additional ']'
+ export ADDITIONAL_FLAGS=additional
+ ADDITIONAL_FLAGS=additional
+ shift 4
+ echo OP_C = character
OP_C = character
+ echo OP_A = additional
OP_A = additional

我也尝试使用破折号 ash ,结果相同。