По теме: https://stackoverflow.com/a/7804208/4937930
Это не ошибка, из-за которой невозможно выйти из сценария или возврат из функции с помощью выхода
или возврата
в подоболочках. Они выполняются в другом процессе и не влияют на основной процесс.
Кроме того, я полагаю, вы видите недокументированное поведение bash в (возможно) неопределенной спецификации. В функции не утверждается никаких ошибок для return
на верхнем уровне команд подоболочки, и она просто ведет себя как exit
.
ИМХО, это ошибка bash из-за несогласованного поведения return
в зависимости от того, находится ли основной оператор в функции или нет.
#!/bin/bash
o() {
# Runtime error, but no errors are asserted,
# each $? is set to the return code.
echo | return 10
echo $?
(return 11)
echo $?
# Valid, each $? is set to the exit code.
echo | exit 12
echo $?
(exit 13)
echo $?
}
o
# Runtime errors are asserted, each $? is set to 1.
echo | return 20
echo $?
(return 21)
echo $?
# Valid, each $? is set to the exit code.
echo | exit 22
echo $?
(exit 23)
echo $?
Вывод:
$ bash script.sh
10
11
12
13
script.sh: line 20: return: can only `return' from a function or sourced script
1
script.sh: line 22: return: can only `return' from a function or sourced script
1
22
23
La utilidad expand
expande caracteres de tabulación a la siguiente tabulación implícita. Históricamente, y por tanto por defecto, son cada ocho caracteres, pero puedes cambiarlos con la opción -t
.
printf "%s\t%s\t%s\n" 12345 1234 123
12345 1234 123
printf "%s\t%s\t%s\n" 12345 1234 123 | expand
12345 1234 123
printf "%s\t%s\t%s\n" 12345 1234 123 | expand -t 10
12345 1234 123
printf "%s\t%s\t%s\n" 12345 1234 123 | expand -t 10,16
12345 1234 123
Si realmente desea reemplazar la pestaña con ocho espacios, puede usarsed
:
printf "%s\t%s\t%s\n" 12345 1234 123 | sed 's/\t/ /g'
Esa es exactamente la idea de una pestaña, salta a la siguiente columna, un punto que no cambia con el ancho del campo anterior. Por ejemplo, las pestañas aquí hacen que la segunda columna se alinee bien:
$ echo $'123\tfoobar\n123456\tblahblah'
123 foobar
123456 blahblah
Con el mismo número de espacios en ambas líneas, el resultado sería feo:
123 foobar
123456 blahblah
Con tabulaciones de 8 -caracteres, esto, por supuesto, solo funciona si los valores son de 0 a 7 (o de 8 a 15, etc. )caracteres de ancho, la variación sobre el límite de 8 -caracteres nuevamente da resultado:
$ echo $'123\tfoobar\n123.345e6\tblahblah'
123 foobar
123.345e6 blahblah
Eso requeriría configurar las tabulaciones en algo diferente:
$ echo $'123\tfoobar\n123.345e6\tblahblah' | expand -t 12
123 foobar
123.345e6 blahblah
En lugar de usar pestañas, la otra forma de hacer una salida como esa sería usar printf
con campos de ancho fijo -(esto es esencialmente similar a la salida deexpand
):
$ printf "%-11 %s\n" 123 foobar 123.345e6 blahblah
123 foobar
123.345e6 blahblah