bash中的多行分配

Ste*_*nko 8 bash sh

在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;
Run Code Online (Sandbox Code Playgroud)

如何在shell中进行这样的多行分配?

gho*_*oti 8

这么多皮肤的方法很多.

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;
'
Run Code Online (Sandbox Code Playgroud)

根据您的问题,这可以让您在变量中进行多行输入.

但是如果你打算在shell脚本中使用这些文件,你需要告诉我们如何,以便我们能够提出适当的答案,而不是让我们猜测.要在shell脚本中使用,文件需要由有用的东西分隔.

你问,"我怎样才能在shell中进行这样的多行分配",但是你的例子中的赋值实际上是一个SINGLE行,^每个输入行的末尾都否定了下面的换行符(没有转义它,如另一个答案所示) .

我在这个答案中的解决方案是多线的,但你需要解释更多关于你需要它的内容,以确定什么是有用的.

例如,如果您需要单步执行将使用该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
Run Code Online (Sandbox Code Playgroud)

  • 是.如果你说`echo'$ JARS"`,你得到的输出格式就像你指定的那样.你应该密切关注[如何在Bash中使用引号](http://mywiki.wooledge.org/Quotes).它们非常重要. (3认同)

小智 5

正如我将展示的,这个问题隐式地请求单行输出

测试.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%
Run Code Online (Sandbox Code Playgroud)

输出

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;
Run Code Online (Sandbox Code Playgroud)

测试文件

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"
Run Code Online (Sandbox Code Playgroud)

输出

$ ./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;
Run Code Online (Sandbox Code Playgroud)


mat*_*eek 5

或者

SOMEVAR=$( cat <<EOF
value1
value2
value3
value4
value5
EOF
)
Run Code Online (Sandbox Code Playgroud)