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
先赋值一个变量为一个路径,如下:
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
记忆方法如下:
# 是去掉左边(在键盘上 # 在 $ 之左边)
% 是去掉右边(在键盘上 % 在 $ 之右边)
单一符号是最小匹配;两个符号是最大匹配
*是用来匹配不要的字符,也就是想要去掉的那部分
还有指定字符分隔号,与*配合,决定取哪部分
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.
[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
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
[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
Turn: la diferencia entre shell $ (()), $ (), `` y $ {}
Lo anterior es el conocimiento relacionado con Linux compartido por Liangxu Tutorial Network para todos los amigos.