2012-06-27 4 views
6

В CMD-файлах на окнах я:назначения Multiline в Баше

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; 

Как я могу сделать такое многострочное назначение в скорлупе?

ответ

4

Вопрос неявно запрашивает одиночный вывод, как я покажу.

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% 

Выходной

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" 

Выход

$ ./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, ах да. Не обращал внимания на точку с запятой. Он должен просто требовать котировки для каждого элемента. – Shahbaz

1

или, альтернативно

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

Это дает мне: ./parser.sh: строка 1: неожиданный EOF при поиске соответствия ') ' ./parser.sh: строка 56: синтаксическая ошибка: неожиданный конец файла –

+0

не может понять, почему он не работает для вас .. hmmm – matcheek

+0

Поскольку закрытие EOF не может быть отступом. ** edit ** вы его уже получили. :) – ormaaj

5

Так много способов кожи этой кошки.

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

Это дает вам многострочный вход в переменную, на ваш вопрос.

Но если вы планируете использовать эти файлы в сценарии оболочки, вам нужно рассказать нам, как, чтобы мы могли придумать соответствующие ответы, вместо того, чтобы нас угадывать. Для использования в сценарии оболочки файлы должны быть разделены чем-то полезным.

Вы спросили: «Как я могу сделать такое многострочное задание в оболочке», но задание в вашем примере фактически в одной строке, с ^ в конце каждой строки ввода отрицая следующую строку (не ускользающех это, как предложил другой ответ).

Мое решение в этом ответе является многострочным, но вам нужно будет объяснить больше о том, что вам нужно для этого, чтобы определить, что будет полезно.

Например, если вам нужно пройти через список файлов, которые будут обрабатываться с помощью команды jar, вы можете иметь что-то вроде:

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

Если я говорю echo $ JARS, тогда строка результата разделяется пробелом. –

+3

Да. И если вы произнесете «echo» $ JARS «', вы получите результат, форматированный так, как вы его указали. Вы должны обратить пристальное внимание на [как кавычки используются в Bash] (http://mywiki.wooledge.org/Quotes). Они чрезвычайно важны. – ghoti

+0

Должен ли я помещать новый символ строки в конце каждой строки? –