问题复原:
在默认shell为bash(其他bash可能也会出现同样的问题,需要有心人去验证一下)。
shell的环境变量也为默认。
HOSTRecord='@ * www ddns'
host='baidu.com'
for rec in ${HOSTRecord} ; do
subdomain=$rec
echo "$subdomain.$host"
done
结果:
1,此脚本运行的起始目录有文件夹 dir1 文件file1,一般还有脚本本身ddns.sh这个文件,则:
@.baidu.com
ddns.sh.baidu.com
dir1.baidu.com
file1.baidu.com
www.baidu.com
ddns.baidu.com
2,此脚本运行的起始目录无任何文件,则:
@.baidu.com
*.baidu.com
www.baidu.com
ddns.baidu.com
解决办法:
1,使用16进制转化,把原始的字符串转化为纯16进制,再过滤替换存储为原始字符。
https://blog.csdn.net/TCXP_for_wife/article/details/48604309
CODE_PASS='a * b'
HEX_PASS=""
CODE_PASS=$(echo -n "$CODE_PASS" | od -A n -t x1)
for ps in $CODE_PASS # Add \x during loop
do
if [ $ps = "5c" ];then # Add additional \ if met \
HEX_PASS=$HEX_PASS\\x5c\\x$ps
elif [ $ps = "26" ];then # Add additional \ if met &
HEX_PASS=$HEX_PASS\\x5c\\x$ps
else # Just add \x
HEX_PASS=$HEX_PASS\\x$ps
fi
--# echo -e "\x62"
--# b
2,使用环境变量命令 set
https://www.cnblogs.com/fulucky/p/7940501.html
https://www.cnblogs.com/tychyg/p/5069011.html
https://www.aliyun.com/jiaocheng/198436.html
set -f
echo *
set +f