8

Windowsの.cmdファイルで私はします:

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

3 に答える 3

9

この猫の皮を剥ぐ方法はたくさんあります。

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

これにより、質問ごとに、変数に複数行の入力が得られます。

ただし、これらのファイルをシェルスクリプトで使用することを計画している場合は、推測するのではなく、適切な回答を考え出すことができるように、その方法を教えてください。シェルスクリプトで使用するには、ファイルを何か便利なもので区切る必要があります。

「シェルでこのような複数行の割り当てを行うにはどうすればよいですか」と質問しましたが、この例の割り当ては実際には1行であり^、各入力行の最後に次の改行が否定されています(別の回答が示唆しているように、エスケープしないでください)。 。

この回答の私の解決策は複数行ですが、何が役立つかを判断するには、これが何のために必要かについて詳しく説明する必要があります。

たとえば、jarコマンドで処理されるファイルのリストをステップスルーする必要がある場合は、次のようなものが必要になる場合があります。

#!/bin/sh

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

set $JARS
for jarfile in "$@"; do
  jar xf "$jarfile" ...
done
于 2012-06-27T20:54:33.273 に答える
6

または代わりに

SOMEVAR=$( cat <<EOF
value1
value2
value3
value4
value5
EOF
)
于 2012-06-27T20:52:10.593 に答える
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%

出力

c:\home\Steven\Desktop>test.bat
./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;

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;
于 2012-06-27T20:47:28.223 に答える