shell编程 ubuntu bash 中的 *(星号)

问题复原:
在默认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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值