2012-06-27 14 views
6

En .cmd en las ventanas que hacer:asignación de múltiples líneas en bash

SET JARS=^ 
./lib/apache-mime4j-0.6.jar;^ 
./lib/apache-mime4j-0.6.jar;^ 
./lib/bsh-1.3.0.jar;^ 
./lib/cglib-nodep-2.1_3.jar;^ 
./lib/commons-codec-1.6.jar;^ 
./lib/commons-collections-3.2.1.jar;^ 
./lib/commons-exec-1.1.jar;^ 
./lib/commons-io-2.0.1.jar;^ 
./lib/commons-io-2.3.jar; 

¿Cómo puede hacer que dicha cesión de varias líneas en la concha?

Respuesta

4

La pregunta implícitamente solicita salida de línea única, como lo mostraré.

test.bat

@SET JARS=^ 
./lib/apache-mime4j-0.6.jar;^ 
./lib/apache-mime4j-0.6.jar;^ 
./lib/bsh-1.3.0.jar;^ 
./lib/cglib-nodep-2.1_3.jar;^ 
./lib/commons-codec-1.6.jar;^ 
./lib/commons-collections-3.2.1.jar;^ 
./lib/commons-exec-1.1.jar;^ 
./lib/commons-io-2.0.1.jar;^ 
./lib/commons-io-2.3.jar; 
@echo %JARS% 

salida

test.sh

JARS=\ 
'./lib/apache-mime4j-0.6.jar;'\ 
'./lib/apache-mime4j-0.6.jar;'\ 
'./lib/bsh-1.3.0.jar;'\ 
'./lib/cglib-nodep-2.1_3.jar;'\ 
'./lib/commons-codec-1.6.jar;'\ 
'./lib/commons-collections-3.2.1.jar;'\ 
'./lib/commons-exec-1.1.jar;'\ 
'./lib/commons-io-2.0.1.jar;'\ 
'./lib/commons-io-2.3.jar;' 
echo "$JARS" 

salida

$ ./test.sh 
./lib/apache-mime4j-0.6.jar;./lib/apache-mime4j-0.6.jar;./lib/bsh-1.3.0.jar;./li 
b/cglib-nodep-2.1_3.jar;./lib/commons-codec-1.6.jar;./lib/commons-collections-3. 
2.1.jar;./lib/commons-exec-1.1.jar;./lib/commons-io-2.0.1.jar;./lib/commons-io-2 
.3.jar; 
+0

@GordonDavisson, ah sí. No prestó atención al punto y coma. Solo debería necesitar una cita en cada elemento. – Shahbaz

1

o alternativamente

SOMEVAR=$(cat <<EOF 
value1 
value2 
value3 
value4 
value5 
EOF 
) 
+0

Esto me da: ./parser.sh: línea 1: EOF inesperado al buscar el correspondiente ') ' ./parser.sh: línea 56: error de sintaxis: inesperado al final del archivo –

+0

realmente no se puede ver por qué no funciona para ti .. hmmm – matcheek

+0

Porque el EOF de cierre no se puede sangrar. ** editar ** ya lo tienes. :) – ormaaj

5

Muchas maneras de pelar este gato.

JARS=' 
./lib/apache-mime4j-0.6.jar; 
./lib/apache-mime4j-0.6.jar; 
./lib/bsh-1.3.0.jar; 
./lib/cglib-nodep-2.1_3.jar; 
./lib/commons-codec-1.6.jar; 
./lib/commons-collections-3.2.1.jar; 
./lib/commons-exec-1.1.jar; 
./lib/commons-io-2.0.1.jar; 
./lib/commons-io-2.3.jar; 
' 

Esto le proporciona la entrada de varias líneas en una variable, según su pregunta.

Pero si planea UTILIZAR estos archivos en un script de shell, debe decirnos cómo, para que podamos encontrar las respuestas adecuadas, en lugar de hacernos adivinar. Para usar en un script de shell, los archivos deben estar delimitados por algo útil.

Se preguntó: "¿Cómo puedo hacer que dicha cesión de varias líneas con cáscara", pero la asignación en su ejemplo es en realidad una sola línea, con el ^ al final de cada línea de entrada negando el salto de línea (no escapar esto, como sugirió otra respuesta).

Mi solución en esta respuesta es multilínea, pero tendrá que explicar más acerca de lo que necesita para determinar lo que será útil.

Por ejemplo, si tiene que pasar a través de una lista de archivos que se procesarán con el comando jar, es posible que desee tener algo como:

#!/bin/sh 

JARS=' 
./lib/apache-mime4j-0.6.jar 
./lib/bsh-1.3.0.jar 
... 
' 

set $JARS 
for jarfile in "[email protected]"; do 
    jar xf "$jarfile" ... 
done 
+1

Si digo echo $ JARS, la cadena resultante está separada por espacios. –

+3

Sí. Y si dices 'echo '$ JARS" ', obtienes la salida formateada de la manera que la especificaste. Debes prestar mucha atención a [cómo se usan las citas en Bash] (http://mywiki.wooledge.org/Quotes). Ellos son extremadamente importantes. – ghoti

+0

¿Debo poner un nuevo carácter de línea al final de cada cadena? –

Cuestiones relacionadas