linux $ ()

Sustitución de mando

En bash, $( )y (comillas inversas) se utilizan para la sustitución de comandos. La sustitución de comandos es similar a la sustitución de variables. Ambos se utilizan para reorganizar la línea de comandos. Primero complete la línea de comando entre comillas, luego reemplace el resultado y luego vuelva a ensamblar la nueva línea de comando.

exp 1

[root@localhost ~]# echo today is $(date "+%Y-%m-%d")
today is 2017-11-07
[root@localhost ~]# echo today is `date "+%Y-%m-%d"`
today is 2017-11-07

$ () y ` ` En funcionamiento, ambos logran el efecto correspondiente, pero se recomienda usar $ () por las siguientes razones:

` ` es fácil de confundir ”, especialmente para principiantes, y $ () es más intuitivo. Finalmente, la desventaja de $ () es que no todos los sistemas similares a Unix admiten este método, pero las comillas invertidas definitivamente son compatibles.

exp 2

[root@localhost ~]#  echo Linux `echo Shell `echo today is `date "+%Y-%m-%d"```
Linux Shellecho today is 2017-11-07     #过多使用``会有问题
[root@localhost ~]# echo Linux `echo Shell $(echo today is $(date "+%Y-%m-%d"))`
Linux Shell today is 2017-11-07    ``和$()混合使用
[root@localhost ~]# echo Linux $(echo Shell $(echo today is $(date "+%Y-%m-%d")))
Linux Shell today is 2017-11-07    #多个$()同时使用也不会有问题

$ {} sustitución de variables

En general, no hay diferencia entre $ var y $ {var}, pero el uso de $ {} definirá con mayor precisión el alcance del nombre de la variable.

exp 1

[root@localhost ~]# A=Linux
[root@localhost ~]# echo $AB    #表示变量AB

[root@localhost ~]# echo ${A}B    #表示变量A后连接着B
LinuxB

Tome la ruta, el nombre del archivo, el sufijo

Copiar codigo

先赋值一个变量为一个路径,如下:
file=/dir1/dir2/dir3/my.file.txt

命令    解释    结果
${file#*/}    拿掉第一条 / 及其左边的字符串    dir1/dir2/dir3/my.file.txt
[root@localhost ~]# echo ${file#*/}
dir1/dir2/dir3/my.file.txt

${file##*/}    拿掉最后一条 / 及其左边的字符串    my.file.txt
[root@localhost ~]# echo ${file##*/}
my.file.txt

${file#*.}    拿掉第一个 . 及其左边的字符串    file.txt
[root@localhost ~]# echo ${file#*.}
file.txt

${file##*.}    拿掉最后一个 . 及其左边的字符串    txt
[root@localhost ~]# echo ${file##*.}
txt

${file%/*}    拿掉最后一条 / 及其右边的字符串    /dir1/dir2/dir3
[root@localhost ~]# echo ${file%/*}
/dir1/dir2/dir3

${file%%/*}    拿掉第一条 / 及其右边的字符串    (空值)
[root@localhost ~]# echo ${file%%/*}
(空值)

${file%.*}    拿掉最后一个 . 及其右边的字符串    /dir1/dir2/dir3/my.file
[root@localhost ~]# echo ${file%.*}
/dir1/dir2/dir3/my.file

${file%%.*}    拿掉第一个 . 及其右边的字符串    /dir1/dir2/dir3/my
[root@localhost ~]# echo ${file%%.*}
/dir1/dir2/dir3/my
记忆方法如下:

# 是去掉左边(在键盘上 # 在 $ 之左边)
% 是去掉右边(在键盘上 % 在 $ 之右边)
单一符号是最小匹配;两个符号是最大匹配
*是用来匹配不要的字符,也就是想要去掉的那部分
还有指定字符分隔号,与*配合,决定取哪部分

Copiar codigo

Tomar subcadena y reemplazar

命令                                    解释                              结果
${file:0:5}               提取最左边的 5 个字节                /dir1
${file:5:5}               提取第 5 个字节右边的连续 5 个字节         /dir2
${file/dir/path}            将第一个 dir 提换为 path              /path1/dir2/dir3/my.file.txt
${file//dir/path}        将全部 dir 提换为 path               /path1/path2/path3/my.file.txt
${#file}              获取变量长度                     27                            

Asignar valores a variables según el estado

mando Explicación Observaciones
$ {archivo-mi.file.txt} Si $ file no está configurado, use my.file.txt como valor de retorno Los valores nulos y no vacíos no se procesan
$ {archivo: -mi.file.txt} Si $ file no está configurado o está vacío, use my.file.txt como valor de retorno Sin procesamiento cuando el valor no está vacío
$ {archivo + my.file.txt} Si $ file está configurado como vacío o no vacío, use my.file.txt como valor de retorno Sin procesamiento si no está configurado
$ {archivo: + my.file.txt} Si $ file no está vacío, use my.file.txt como valor de retorno No se procesará ningún ajuste y el valor vacío
$ {archivo = txt} Si $ file no está configurado, devuelva txt y asigne $ file a txt Los valores nulos y no vacíos no se procesan
$ {archivo: = txt} Si $ file no está configurado o está vacío, devuelva txt y asigne $ file a txt Sin procesamiento cuando el valor no está vacío
$ {archivo? my.file.txt} Si $ file no está configurado, envíe my.file.txt a STDERR Los valores nulos y no vacíos no se procesan
$ {archivo:? my.file.txt} Si $ file no está configurado o está vacío, entonces envíe my.file.txt a STDERR Sin procesamiento cuando el valor no está vacío

consejos:

El entendimiento anterior es que debe distinguir claramente los tres estados de asignación de desarmado, nulo y no nulo. En términos generales ,: está relacionado con nulo. Si no incluye :, nulo no se verá afectado. Si incluye: entonces incluso nulo también se ve afectado.

Formación

A="a b c def"   # 定义字符串
A=(a b c def)   # 定义字符数组
mando Explicación resultado
$ {A [@]} Devuelve todos los elementos de la matriz a B C D e F
$ {A [*]} Lo mismo que arriba a B C D e F
$ {A [0]} Devuelve el primer elemento de la matriz. un
$ {# A [@]} Devuelve el número total de elementos de la matriz. 4
$ {# A [*]} Lo mismo que arriba 4
$ {# A [3]} Devuelve la longitud del cuarto elemento, que es la longitud de def 3
A [3] = xzy Es redefinir el cuarto número de grupo como xyz

$ (()) y operaciones enteras

Símbolos aritméticos enteros en bash

símbolo Caracteristicas
+ - * / Sumar, restar, multiplicar y dividir respectivamente
% Operación restante
& | ^! Respectivamente "Y, O, XOR, NO"

El nombre de la variable en $ (()) se puede reemplazar agregando un símbolo $ delante de él, o no.

Copiar codigo

[root@localhost ~]# echo $((2*3))
6
[root@localhost ~]# a=5;b=7;c=2
[root@localhost ~]# echo $((a+b*c))
19
[root@localhost ~]# echo $(($a+$b*$c))
19

Copiar codigo

Conversión base

$ (()) puede convertir otras bases en números decimales y mostrarlas. El uso es el siguiente: echo $((N#xx))donde N es la base y xx es un cierto valor en la base. Después de ejecutar el comando, se puede obtener el valor del número base convertido a decimal.

[root@localhost ~]# echo $((2#110))
6
[root@localhost ~]# echo $((16#2a))
42
[root@localhost ~]# echo $((8#11))
9

(()) Redefinir el valor de la variable

Copiar codigo

[root@localhost ~]# a=5;b=7
[root@localhost ~]# ((a++))
[root@localhost ~]# echo $a
6
[root@localhost ~]# ((a--));echo $a
5
[root@localhost ~]# ((a<b));echo $?
0
[root@localhost ~]# ((a>b));echo $?
1

Copiar codigo

Turn: la diferencia entre shell $ (()), $ (), `` y $ {}

Lo anterior es el conocimiento relacionado con Linux compartido por Liangxu Tutorial Network para todos los amigos.

Supongo que te gusta

Origin blog.csdn.net/manongxianfeng/article/details/113054828
Recomendado
Clasificación