代码如下
#!/bin/bash
arr=(a b ** c)
for i in ${arr[@]}
do
echo $i
done
输出:
a
b
test1.sh
test.sh
c
上面的数组arr中有 ** 特殊符号,我想要就是源字符串"**",不让翻译成特殊符号该怎么做?
在shell中,特殊字符的转义有三种办法
用\转义: 把\字符放在特殊字符的前面
用单引号('')转义: 用单引号把参数括起来
用双引号("")转义: 用双引号把参数括起来
https://www.jb51.net/article/105301.htm
arr=(a b \*\* c)
for i in "${arr[@]}"
do
echo "$i"
done
数组中的“**”使用“\”转译
(a b ** c)
同@su_sys
其他方式:
#!/bin/sh
arr=(a b '**' c)
for i in "${arr[@]}"
do
echo "$i"
done
或者:
#!/bin/sh
arr=(a b "**" c)
for i in "${arr[@]}"
do
echo "$i"
done
关键是你的数组是如何构建的,必须在构建数组的时候使用转义符、单引号、双引号中的一种。
问题原因:shell自动解析了通配符"*"
解决方法:
1. set -f 暂时关闭通配符解析
2. 暂时修改通配符,输出时恢复
#!/bin/bash
set -f
arr=(a b ** c)
for i in ${arr[@]}
do
echo $i
done
set +f
#or
arr=(a b \"**\" c)
for i in ${arr[@]}
do
echo $i | tr -d '"'
done
没有答案