Bash:将长字符串参数拆分为多行?

ccp*_*zza 23 bash multiline

给定一个带有单个长字符串参数的命令,如:

mycommand -arg1 "very long string which does not fit on the screen"
Run Code Online (Sandbox Code Playgroud)

是否有可能以某种方式分割它,类似于如何分割单独的参数\.

我试过了:

mycommand -arg1 "very \
    long \
    string \
    which ..."
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

mycommand 是一个外部命令,因此不能修改为采用单个参数.

Tom*_*ech 29

您可以将字符串分配给变量,如下所示:

long_arg="my very long string\
 which does not fit\
 on the screen"
Run Code Online (Sandbox Code Playgroud)

然后只需使用变量:

mycommand "$long_arg"
Run Code Online (Sandbox Code Playgroud)

在双引号内,删除前面带有反斜杠的换行符.请注意,字符串中的所有其他空格都很重要,即它将出现在变量中.

  • 我必须在使用java运行任何东西的脚本中一直这样做,尤其是在oracle下.我已经有了命令字符串这么长时间,我把args分成组,然后用引用的supergoups分配组,以便实际的调用*逻辑上*可读,并且如果你阅读了所有设置,则可解析.痛苦但有时必要...... (2认同)

小智 7

你试过没有引号吗?

$ foo() { echo -e "1-$1\n2-$2\n3-$3"; }

$ foo "1 \
2 \
3"

1-1 2 3
2-
3-

$ foo 1 \
2 \ 
3

1-1
2-2
3-3
Run Code Online (Sandbox Code Playgroud)

当您将其封装在双引号中时,它会尊重您的反斜杠并忽略以下字符,但是由于您将整个内容括在引号中,因此它认为引号内的整个文本块都应该被视为单个争论。