scripts script programas pasar parametros operaciones manejo entorno ejemplos comando cadenas aritmeticas bash tabs echo spaces

programas - scripts bash ejemplos



Caracteres de la pestaƱa eco en el script bash (10)

Desde la página de manual de bash:

Las palabras de la forma $ ''cadena'' se tratan especialmente. La palabra se expande a la cadena, con caracteres de escape de barra invertida reemplazados según lo especificado por el estándar ANSI C.

Así que puedes hacer esto:

echo $''hello/tworld''

¿Cómo hago eco de uno o más caracteres de tabulación usando un script de bash? Cuando corro este codigo

res='' ''x # res = "/t/tx" echo ''[''$res'']'' # expect [/t/tx]

entiendo esto

res=[ x] # that is [<space>x]



Ponga su cadena entre comillas dobles :

echo "[$res]"


Si desea usar echo "a/tb" en un script, ejecute el script como:

# sh -e myscript.sh

Alternativamente, puede otorgar a myscript.sh el permiso de ejecución y luego ejecutar el script.

# chmod +x myscript.sh # ./myscript.sh


También puedes probar:

echo Hello$''/t''world.


Usa printf , no echo .

Existen múltiples versiones diferentes del comando echo . Hay /bin/echo (que puede ser o no la versión de GNU Coreutils, dependiendo del sistema), y el comando echo está integrado en la mayoría de los shells. Diferentes versiones tienen diferentes maneras (o ninguna) de especificar o deshabilitar escapes para los caracteres de control.

printf , por otro lado, tiene mucha menos variación. Puede existir como un comando, normalmente /bin/printf , y está integrado en algunos shells (bash y zsh lo tienen, tcsh y ksh no), pero las diferentes versiones son mucho más similares entre sí que las diferentes versiones de echo son Y no tiene que recordar las opciones de la línea de comandos (con algunas excepciones; GNU Coreutils printf acepta --version y --help , y el bash printf incorporado acepta -v var para almacenar la salida en una variable).

Para su ejemplo:

res='' ''x # res = "/t/tx" printf ''%s/n'' "[$res]"

Y ahora es el momento para que admita que el echo funcionará igual de bien para el ejemplo que está preguntando; solo necesitas poner comillas dobles alrededor del argumento:

echo "[$res]"

como escribió kmkaplan (hace dos años y medio, me di cuenta!). El problema con tus comandos originales:

res='' ''x # res = "/t/tx" echo ''[''$res'']'' # expect [/t/tx]

no es con echo ; es que la cáscara reemplazó la pestaña con un espacio antes de que echo lo viera.

echo está bien para una salida simple, como echo hello world , pero debes usar printf siempre que quieras hacer algo más complejo. Puede hacer que echo funcione, pero es probable que el código resultante falle cuando lo ejecute con una implementación de echo diferente o un shell diferente.


Utilice la combinación de teclas textual, ^V ( CTRL+V , Cv , lo que sea ).

Cuando escribe ^V en el terminal (o en la mayoría de los editores de Unix), el siguiente carácter se toma textualmente . Puede usar esto para escribir un carácter de tabulación literal dentro de una cadena de la que está haciendo eco.

Algo así como las siguientes obras:

echo "^V<tab>" # CTRL+V, TAB

Bash docs ( qv , "quoted-insert")

quoted-insert (Cq, Cv) Agregue el siguiente carácter que escribe a la línea literalmente. Así es como insertar secuencias de teclas como Cq, por ejemplo.

nota al margen: de acuerdo con esto, ALT+TAB debería hacer lo mismo, pero todos hemos enlazado esa secuencia al cambio de ventana para que no podamos usarla

Insertar pestaña (M-TAB) Insertar un carácter de pestaña.

-

Nota: puedes usar esta estrategia con todo tipo de personajes inusuales. Como un retorno de carro:

echo "^V^M" # CTRL+V, CTRL+M

Esto se debe a que el retorno de carro es ASCII 13, y M es la letra 13 del alfabeto, por lo que cuando escribe ^M , obtiene el 13er carácter ASCII. Puede verlo en acción usando ls^M , en un indicador vacío, que insertará un retorno de carro, lo que provocará que el indicador actúe como si presionara regresar. Cuando normalmente se interpretan estos caracteres, textualmente se obtiene el carácter literal.


necesitas usar la bandera -e para el eco, entonces puedes

echo -e "/t/t x"


echo -e '' /t ''

hará eco en ''new tab space newline'' ( -e significa ''habilitar la interpretación de escapes de barra invertida''):

$ echo -e '' /t '' | hexdump -C 00000000 20 09 20 0a | . .|


res="/t/tx" echo -e "[${res}]"