2012-06-27 8 views
6

W plikach cmd na windows robię:przypisanie wielowierszowego w 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; 

Jak mogę zrobić takie zadanie wielowierszowego w skorupkach?

Odpowiedz

4

Pytanie domyślnie żąda pojedynczego wyjścia liniowego, tak jak pokażę.

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% 

Wyjście

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" 

Wyjście

$ ./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 tak. Nie zwracał uwagi na średnik. Powinien po prostu potrzebować wyceny na każdym elemencie. – Shahbaz

1

lub alternatywnie

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

To daje mi: ./parser.sh: wiersz 1: nieoczekiwany EOF podczas szukania pasującego ') ' ./parser.sh: linia 56: błąd składni: nieoczekiwany koniec pliku –

+0

nie może naprawdę zrozumieć, dlaczego to nie działa dla ciebie .. hmmm – matcheek

+0

Ponieważ zamykanie EOF nie może być wcięte. ** edytuj ** już to masz. :) – ormaaj

5

Tak wiele sposobów na skórze tego kota.

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; 
' 

Dzięki temu otrzymujesz wejście multilinii w zmiennej, na swoje pytanie.

Ale jeśli zamierzasz używać tych plików w skrypcie powłoki, musisz nam powiedzieć, jak to zrobić, abyśmy mogli wymyślić odpowiednie odpowiedzi, zamiast zgadywać. Do użycia w skrypcie powłoki, pliki muszą być ograniczone przez coś użytecznego.

zapytałem: „Jak można zrobić taką multilinii zadanie w skorupkach”, ale przypisanie w przykładzie jest rzeczywiście jednym wierszu, z ^ na końcu każdej linii wejściowej negując następujące przełamane (nie ucieczki to, jak sugerowała inna odpowiedź).

Moje rozwiązanie w tej odpowiedzi jest wieloliniowe, ale musisz wyjaśnić więcej o tym, czego potrzebujesz, aby ustalić, co będzie przydatne.

Na przykład, jeśli trzeba przejść przez listę plików, które będą przetwarzane za pomocą polecenia jar, to może chcieć mieć coś takiego:

#!/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

Jeśli powiem echo $ JARS, ciąg wynikowy zostanie oddzielony spacją. –

+3

Tak. A jeśli powiesz "echo" $ JARS "', otrzymasz sformatowane wyjście tak, jak je określiłeś. Powinieneś zwracać szczególną uwagę na [w jaki sposób używane są cytaty w Bashu] (http://mywiki.wooledge.org/Quotes). Są niezwykle ważne. – ghoti

+0

Czy powinienem wstawić znak nowego wiersza na końcu każdego ciągu? –