Soy usuario de Bash desde hace algún tiempo. Quiero aprender al menos otro caparazón ahora, así que he estado recogiendo el Korn Shell. Sin embargo, no parece que Ksh haya tenido actualizaciones importantes durante casi veinte años, y he leído que Zsh incorpora funciones del mismo. He estado leyendo muchas de las preguntas de comparación de shell en la red StackExchange, pero no encontré una respuesta a esto:¿Hay características de Korn Shell que Zsh no incorpora?Si es así, ¿Que son?
Respuesta1
Aquí esta laArtículo de Wikipedia sobre comparación de shell de comandos.
Según eso, la única característica que tiene ksh y que zsh no tiene esParámetros con nombrepara "tipos" definidos por el usuario. Puede haber otros, ya que ese artículo no es una lista exhaustiva, especialmente para características oscuras.
Yendo en la otra dirección, la respuesta a tu pregunta podría llenar un libro (posiblementeÉste).
Zsh tiene muchas características que ksh no tiene. Algunos populares sonpila de comandos,pila de directorio,compartir historiayrápido.
- Pila de comandoses cuando estás escribiendo un comando y te das cuenta de que primero debes ejecutar otro comando. Simplemente envíe la línea actual a la pila de comandos, ejecute el otro comando y luego saque el comando de la pila. Puedes hacer esto varias veces. (zsh es el único shell que conozco que proporciona esto).
- Pila de directorio(también conocido como
pushd
/popd
) es cuando desea cambiar a directorios en sucesión y luego regresar en orden inverso. (Muchos shells proporcionan esto, incluido bash). - Compartir historiaes donde cada capa abierta comparte una única historia común. Ejecute un comando en una ventana, cambie a otra y estará disponible en su historial.
- rápidoes como su mensaje, excepto que está justificado a la derecha. A mucha gente le gusta poner el
cwd
odate
en elrprompt
.
Aquí hay algunas discusiones en los sitios de Stack Exchange sobre zsh:
Respuesta2
ksh88, la variante más famosa tal como se incluyó en SVR4, bash
en la que se basa principalmente el lenguaje, el pdksh parcialmente clonado, y cuyo subconjunto es la base para la especificación POSIX, sh
no ha evolucionado mucho (aparte de algunas correcciones de errores y alineaciones POSIX). por algunos proveedores) desde su último lanzamiento en mayo de 1993 (ksh88i).
Sin embargo, ksh93, una reescritura de David Korn, lanzada por primera vez en diciembre de 1993, ha estado en desarrollo activo hasta aproximadamente 2014 y su código fuente fueliberadoen 2000. El último lanzamiento oficial, ksh93u+, se realizó en agosto de 2012 (solo unas semanas después de que usted hiciera esa pregunta), y hubo una versión "beta" (ksh93v-) realizada en 2014 por los autores originales después de su creación. redundante por AT&T con muchas características nuevas.
Ha habido un esfuerzo comunitario para continuar con el desarrollo y modernizar el código, basado en ksh93v, lo que llevó a un ksh2020, peroese esfuerzo ahora ha sido abandonado. Aesfuerzo separado para mantener ksh93u+Después de eso parece que va por el mismo camino. mientras ununo nuevo (ksh93u+m)Parece un poco más prometedor en este momento.
ksh93 es/era más que un caparazón. Fue desarrollado junto con una flota de utilidades que reutilizan parte del mismo código y que podría integrarse en ksh93, un poco como Busybox.
Tenga en cuenta que era más uninvestigaciónesfuerzo, a menudo se considera experimental y está muy poco documentado.
Si bien zsh
se desarrolló principalmente para ser un poderoso shell interactivo, el enfoque de ksh93 era más como un lenguaje de programación. Se ha hecho un gran esfuerzo en el lenguaje y en la optimización con el objetivo de estar en una categoría similar a, perl
por python
ejemplo.
Hay muchas características de ksh93 que zsh no tiene, al igual que hay muchas características de zsh que ksh93 no tiene, y ambos han tomado prestadas características el uno del otro. Hay un gran conjunto de características comunes y hay cosas que ambos pueden hacer, pero de maneras muy diferentes.
Entre las cosas que tiene ksh93 pero zsh no:
- todas las funciones integradas de ast-open:
ksh93
cuando se construye como parte de ast-open, tiene muchas funciones integradas que zsh no tiene, incluidas versiones mejoradas de algunas utilidades estándar comodate
,join
,head
,tr
,uniq
...wc
(aunque zsh tiene algunas de las funcionalidad de aquellos en sus propias funciones integradas o características del lenguaje). Eso esmejoramientolado de las cosas. No puedes serperl
así si necesitas bifurcar un proceso para hacer algo. - sustituciones de comandos sin bifurcación (
$(...)
) y sustituciones de comandos que no crean un entorno de subcapa${ ...; }
. - matrices multidimensionales:
a=((a b) (c d))
- Características de la programación orientada a objetos (tipos, estructuras, disciplinas, métodos...).
- alcance estático para variables y opciones (
zsh
tieneprivate
para variables, pero no tiene alcance estático para opciones). - referencias de nombres (esenciales para un shell con alcance estático y estructuras de programación de objetos, no tanto con aquellos con alcance dinámico como zsh o bash)
- Manipulación de fecha/hora, incluido el lenguaje natural, crontab, formatos iso en sus
printf
componentesdate
incorporados (zsh
'sstrftime
es muy limitado en comparación con eso). - algunos operadores de redirección útiles (
<#((...))
para buscar,<>;
sobrescribir y truncar...). - espacios de nombres
- grupos de trabajo y coshells.
- CSV/URI/entidades HTML/codificación/decodificación base64.
- codificación/decodificación json en ksh93v- para (des)serializar sus estructuras de datos avanzadas en un formato que otras herramientas puedan entender (con muchos errores, eliminado en ksh2020).
$"..."
para localización de mensajes/dev/tcp
,/dev/udp
(zsh
tieneztcp
,zsocket
para sockets de dominio UNIX, pero no UDP)- También había un
dtksh
shell que agregaba la funcionalidad del kit de herramientas X a ksh93 incluido en CDE en los años 90. - hay un
shcomp
paracompilarcódigo ksh.