shell 定义数组中有特殊的符号

代码如下

#!/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

没有答案