Pregunta

Yo estaba buscando sobre algún código ksh y me encontré con una línea No pensé que iba a funcionar. Al probar el código, lo hizo el trabajo, pero no estoy seguro de por qué.

Si es importante, esto se está ejecutando en un sistema AIX 5.3.

La línea en el código fue:

scriptname=$(\basename $0)

No creía que fuera a trabajar a causa de la barra invertida delante del comando basename, pero cuando probé la variable scriptname, tenía el valor correcto.

He hecho un poco más pruebas en la línea de comandos:

$ echo $(\echo test)
test
$ echo $(\echo \test)
test
$ echo $(\e\c\h\o \test)
test
$ echo `\e\c\h\o \test`
test
$ echo $(\echo "\test")
est

Me trató fuera de la subtitution comando, y todavía no ha funcionado como pensé que lo haría:

$ \echo \testi\ng
testing
$ \echo "\testi\ng"
        esti
g

El último es el único que tiene sentido para mí.

¿El KornShell simplemente ignorar las barras invertidas, o tal vez sólo a convertirlos en el carácter delante de la barra invertida? Supuse que poner un \n en cualquier lugar en la línea de comandos sería un salto de línea, pero al parecer sólo si está entre comillas, o \\n.

Puede alguien explicar lo que ksh hace con barras invertidas en la línea de comandos?

De cualquier manera, supongo que la mejor manera de escribir el comando que originalmente interrogué sería:

scriptname=$(basename $0)

en lugar de:

scriptname=$(\basename $0)

¿Es importante?

Gracias de antemano!

¿Fue útil?

Solución

Si cualquier parte de un nombre de comando se cita a continuación, ksh ignorará cualquier alias hora de seleccionar lo que va a ejecutar.

supongo que es por eso que el guión original utilizaba \ nombre base.

Otros consejos

me encontré con una situación relacionada pero ligeramente diferente. Estoy editando un script de shell con varios comandos rm escribir como:

\rm ...

Me preguntaba por qué el '\' era antes de la RM y trató de manera similar, sólo para encontrar que parece que no funciona. Por esta sitio , esto se hace para evitar que el guión de forma accidental usando un alias (por ejemplo, si tiene un alias rm a 'rm -i'). Desde que encontré la discusión sobre desbordamiento de pila en primer lugar, pensé que iba a añadir este bit en caso de que ayuda a cabo la siguiente persona.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top