2012-03-09 19 views
25

Me encontré con esta expresión en un script bash y realmente no es fácil de buscar.

#$... 

Gracias por su ayuda!

+1

http://superuser.com/questions/247127/what-is-and-in-linux – Corbin

+1

Si # $ no es un error tipográfico, entonces AFAIK es una línea de comentario, si se refería a $ #, entonces es el número de argumentos pasados ​​al script o la función –

+0

¡¿Seguro que no es un comentario ?! –

Respuesta

31

#$ hace "nada", ya que # está comenzando el comentario y todo lo que está detrás de él en la misma línea se ignora (con la notable excepción de "shebang").

$#, como lo tenía, imprime el número de argumentos pasados ​​a un script de shell (como $* imprime todos los argumentos).

12

En bash esto es generalmente un comentario, todo después de que se ignora el hash (en la misma línea). Sin embargo, si su script bash se pasa a algo inusual podría ser interpretado por eso. Por ejemplo, si envía una secuencia de comandos a Sun Grid Engine: "Cualquier línea que comience con hash-dollar, es decir, # $, es un comentario especial que SGE entiende que especifica algo sobre cómo o dónde se ejecuta el trabajo. En este caso, especificamos el directorio en el que se ejecutará el trabajo (# $ -cwd) y la cola a la que se unirá el trabajo (# $ -q serial.q). " (Fuente: http://talby.rcs.manchester.ac.uk/~rcs/_linux_and_hpc_lib/sge_intro.html)

+1

Este fue el caso de uso en el que lo encontré: SGE. Gracias. –

+0

Esta es la respuesta real y debe aceptarse – zhouji

8

Podría ser posible que la expresión de la intención era $ # en lugar de # $

$ # almacena el número de argumentos de línea de comandos que se pasa a la consola programa.

por ejemplo:

if [ $# -eq 0 ]; then 
    echo "${USAGE}" >&2 
    exit 1 
fi 

Muestra el mensaje almacenado en la variable $ de uso Si el número de argumentos de línea de comandos es 0.

3

un lugar donde se pueden ver #$ vienen arriba está dentro de una expresión aritmética cuando se cambia la base: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic

Por ejemplo echo $((2#101)) convertirá 101 a base dos, e imprimir 5.

Recientemente he utilizado esta aquí:

calculate_time() { 
    minutes=$((${1:0:1} + ${1:9:1})) 
    seconds=$((${1:2:1} + ${1:11:1})) 
    milliseconds=$((10#${1:4:3} + 10#${1:13:3})) 
    result=$((${minutes}*60*1000 + ${seconds}*1000 + ${milliseconds})) 
    echo $result 
} 

El primer argumento ($1) fue en algún formato que no recuerdo que fue tomada usando awk. El argumento de los milisegundos se analizó como 009, durante 9 milisegundos. Sin embargo, bash trata los números comenzando con un 0 como octal, así que los convertí a decimal. No es exactamente usando #$, pero cuando miré este código después de un rato e intenté recordar lo que estaba pasando, al principio pensé que era una expresión y encontré esta pregunta, por lo que podría ayudar a alguien más.

+0

Lo suficientemente gracioso, incluso SO no puede mostrar esto correctamente. Tampoco se visualiza correctamente en github. Sin embargo, se ve bien en Sublime Text. – gsingh2011

7

Me encontré con un #$ en un script y me preguntaba lo mismo. Hay una respuesta que aún no se mencionó: en bash buscar y reemplazar (ver here).

Normalmente, funciona así:

${PARAMETER/PATTERN/STRING} 

PATTERN también puede incluir anclajes, para que coincida con lo ya sea al principio o al final; a saber # y %:

MYSTRING=ABCCBA 
echo ${MYSTRING/#A/y} # RESULT: yBCCBA 
echo ${MYSTRING/%A/y} # RESULT: ABCCBy 

También puede utilizar una variable para PATTERN-y saltar las barras para aumentar la confusión (y reemplazar el ajuste de patrones con una cadena vacía):

echo ${MYSTRING#$PATTERN} # RESULT: BCCBA 
echo ${MYSTRING%$PATTERN} # RESULT: ABCCB 

Y aquí está, un #$ en una cadena bash.

Cuestiones relacionadas