2011-06-24 26 views
7

¿Hay alguna manera fácil de "unir" los argumentos pasados ​​a un script? Me gustaría algo similar a [email protected], pero eso pasa los argumentos a la vez.Unirse a argumentos - Escape Spaces

Por ejemplo, considere la siguiente secuencia de comandos:

$/bin/bash 

./my_program [email protected] 

Cuando se llama como

./script arg1 arg2 arg3 

my_program recibirá los argumentos como 3 argumentos separados. Lo que quiero, es pasar todos los argumentos como uno argumento, uniéndose a ellos - separados por espacios, algo así como llamando al:

./my_program arg1\ arg2\ arg3 

Respuesta

13

Uso ésta:

./my_program "$*" 
3

He tenido una pista problema similar en la actualidad y se acercó con un código como éste (incluye comprobaciones de validez):

#!/bin/sh 

# sanity checks 
if [ $# -lt 2 ]; then 
    echo "USAGE : $0 PATTERN1 [[PATTERN2] [...]]"; 
    echo "EXAMPLE: $0 TODO FIXME"; 
    exit 1; 
fi 

NEEDLE=$(echo $* | sed -s "s/ /\\\|/g") 
grep $NEEDLE . -r --color=auto 

este pequeño script te permite buscar varias palabras de forma recursiva en todos los fi les debajo del directorio actual. Puede usar sed para reemplazar su delimitador "" (espacio) con lo que quiera. Sustituyo un espacio con una tubería escapada: "" -> "\ |" La cadena resultante puede ser analizada por grep.

Uso

busquen los términos "TODO" y "ARREGLAME":

./script.sh TODO FIXME 

Usted podría preguntarse: ¿Por qué no simplemente llamar directamente grep?

grep "TODO\|FIXME" . -r 

La respuesta es que quería hacer algo de post-procesamiento con los resultados en un script más avanzado. Por lo tanto, necesitaba poder comprimir todos los argumentos pasados ​​(patrones) en una sola cadena. Y esa es la parte clave aquí.

Konrad