Análisis completo de Shell (2): variables de cadena y variables de matriz

I. Introducción

Este artículo presenta principalmente variables de cadena y variables de matriz en scripts de Shell.

Solo recuerde que los tipos de matriz en Shell son cadenas y matrices, básicamente todo el trabajo se puede hacer, comencemos.

2. Variables de cadena de shell

2.1 Simples, dobles y acentos graves

Hay tres tipos de comillas en el shell, comillas simples '', comillas dobles "" y comillas traseras ``.

Hablemos primero de las comillas simples '' y las comillas dobles "", de la siguiente manera:

El mismo punto: ambos resuelven el problema de los espacios en medio de las variables. Debido a que "espacio" es un carácter muy especial en bash, por ejemplo, si str=esto es String está definido en bash, se informará un error. Para evitar errores, se deben usar comillas simples '' y comillas dobles "". ser usado.

La diferencia: la diferencia entre las comillas simples '' y las comillas dobles "" es que las comillas simples '' privan a todos los caracteres del significado especial, y las comillas simples '' se convierten en un carácter simple. La excepción es para la sustitución de parámetros ($) y la sustitución de comandos (``) entre comillas dobles "". Por ejemplo, ingrese:

n=3
echo '$n'

pero
inserte la descripción de la imagen aquí

Mire los acentos graves nuevamente. Los acentos graves son sustitución de comando. La sustitución de comando significa que el shell puede ejecutar el comando en `` primero, guardar temporalmente el resultado de salida y enviarlo a un lugar apropiado. En el siguiente ejemplo, el resultado de la ejecución del comando se almacena en una variable:

#!/bin/bash

DATE=`date`
echo "Date is $DATE"

UP=`date ; uptime`
echo "Uptime is $UP"

inserte la descripción de la imagen aquí

Resumen: la función principal de los acentos graves es la sustitución de comandos, envolver el comando que se ejecutará y envolver el punto y coma en inglés es una nueva línea.
Las comillas simples y las comillas dobles son diferentes:
las variables se pueden identificar entre comillas dobles, pero las variables no se pueden identificar entre comillas simples;
los caracteres de escape se pueden identificar entre comillas dobles, pero los caracteres de escape no se pueden identificar entre comillas simples.

2.2 Tres formas de cuerdas

En Shell, las cadenas incluyen tres formas: sin comillas, comillas simples y comillas dobles, de la siguiente manera:

your_name="runoob"
echo $your_name

# 这里会被解释为一个被双引号包裹的字符串,加$符号的变量会被读取
str="Hello, I know you are $your_name! \n"
echo $str

# 这里会被解释为两个双引号字符串拼接,即""+变量+"",加$符号的变量会被读取
str="Hello, I know you are "$your_name"! \n"
echo $str

# 引号无法解释变量的
str='Hello, I know you are "$your_name"! \n'
echo $str

# 双引号内部可以加转义字符,转义双引号为普通字符,而不是被解释为双引号字符串拼接
str="Hello, I know you are \"$your_name\"! \n"
echo $str

str="Hello, I know you are '$your_name'! \n"
echo $str

str="Hello, I know you are \'$your_name\'! \n"
echo $str

inserte la descripción de la imagen aquí

2.3 Asignación y lectura de variables de cadena

echo $a
echo a

inserte la descripción de la imagen aquí

a=b
echo $a

inserte la descripción de la imagen aquí

2.4 Concatenación de cadenas

your_name="runoob"

# 不使用引号,则赋值号右边的字符串中不能包含空格,因为不能包含空格,但是$符号
# 默认是空格确定变量名的,如果变量名后面还是字符串,要读取的变量必须加上{}
greeting_0=hello,$your_name
echo $greeting_0
# $符号默认是空格确定变量名的,如果变量名后面还是字符串,要读取的变量必须加上{}
greeting_0=hello,${your_name}!
echo $greeting_0

# 使用双引号拼接
greeting_1="hello, "$your_name" !"
greeting_2="hello, "${your_name}" !"
greeting_3="hello, $your_name !"
greeting_4="hello, ${your_name} !"
echo $greeting_1
echo $greeting_2
echo $greeting_3
echo $greeting_4


# 使用单引号拼接
greeting_5='hello, '$your_name' !'
greeting_6='hello, '${your_name}' !'
greeting_7='hello, $your_name !'
greeting_8='hello, ${your_name} !'
echo $greeting_5  
echo $greeting_6
echo $greeting_7
echo $greeting_8

inserte la descripción de la imagen aquí

2.5 Obtener la longitud de la cadena

Agregue # delante de la cadena para obtener la longitud de la cadena sin llamar al método

string="abcd"
echo ${
    
    #string}   # 输出 4
echo ${
    
    #string[0]}   # 输出 4

inserte la descripción de la imagen aquí

2.6 Extracción de subcadenas

El valor de índice del primer carácter es 0, por ejemplo, truncando 4 caracteres del segundo carácter de la cadena:

string=“runoob es un gran sitio”
echo ${string:1:4} # 输出 unoo

inserte la descripción de la imagen aquí

Tres, matriz de conchas

Bash solo admite matrices unidimensionales, no matrices multidimensionales. No puede usar subíndices continuos y no hay límite para el tamaño de la matriz, es decir, la matriz tiene una longitud indeterminada y puede tener elementos ilimitados en la parte posterior. . Los subíndices de los elementos de la matriz se numeran a partir de 0. Para obtener los elementos de la matriz, utilice el subíndice. El subíndice puede ser un número entero o una expresión aritmética, y su valor debe ser mayor o igual que 0.

3.1 Definición de matriz

En el Shell, los paréntesis se utilizan para indicar matrices y los elementos de la matriz están separados por símbolos de "espacio". La forma general de definir una matriz es:

数组名=(值1 值2 ... 值n)

P.ej:

array_name=(value0 value1 value2 value3)

o

array_name=(
value0
value1
value2
value3
)

También es posible definir los componentes individuales de la matriz individualmente:

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

3.2 Asignación de matriz

es sencillo, es

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

3.3 Lectura de matriz

El formato general para leer el valor de un elemento de matriz es:

${
    
    数组名[下标]}

P.ej:

valuen=${array_name[n]}

Use el símbolo @ para obtener todos los elementos de la matriz, o use * para obtener todos los elementos de la matriz, por ejemplo:

echo ${array_name[@]}
echo ${array_name[*]}

3.4 Obtener la longitud de la matriz

El método para obtener la longitud de una matriz es el mismo que para obtener la longitud de una cadena, que consiste en agregar un # delante del nombre de la variable de la matriz, por ejemplo:

Ejemplo

# 取得数组元素的个数
length=${
    
    #array_name[@]}
# 或者
length=${
    
    #array_name[*]}
# 取得数组单个元素的长度
lengthn=${
    
    #array_name[n]}

La definición de matriz, la asignación, la lectura y el cálculo de longitud son los siguientes:

inserte la descripción de la imagen aquí
Resumen: en Shell, las operaciones en arreglos incluyen:
(1) Cuando sea el momento de escribir un elemento de arreglo, simplemente agregue el número de asignación y la constante/variable directamente detrás de él.
(2) Al leer los elementos de la matriz, es necesario envolver una capa sobre los elementos de la matriz ${}antes de que se puedan leer los elementos. En
particular, para obtener todos los elementos de la matriz completa, los números de subíndice en el cuadrado los corchetes se cambian a @o *, que ${array_name[@]} ${array_name[*]}generalmente se usa en for var in arrayEn el ciclo, la matriz aquí necesita obtener todos los elementos de la matriz.
(3) Obtenga la longitud de una sola matriz, envuelva una capa sobre los elementos de la matriz ${#}y obtenga la longitud de toda la matriz (la cantidad de elementos en toda la matriz), es decir ,${#array_name[@]} ${#array_name[*]} generalmente se usa en .for ((i=0;i<${#array[*]};i++))

Cuarto, comentarios de shell

El shell tiene dos formas de comentar,
(1) Las líneas precedidas por # se considerarán comentarios y el intérprete las ignorará.
(2) Use el comentario :<< de la siguiente manera:

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

EOF también puede usar otros símbolos:

实例
:<<'
注释内容...
注释内容...
注释内容...
'
:<<!
注释内容...
注释内容...
注释内容...
!

Cinco, el final

Este artículo presenta principalmente variables de cadena y variables de matriz en scripts de Shell.

¡Codifique todos los días, progrese todos los días! !

Supongo que te gusta

Origin blog.csdn.net/qq_36963950/article/details/123460539
Recomendado
Clasificación