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

Bash:将长字符串参数拆分为多行?,bash,multiline,Bash,Multiline,给定一个接受单个长字符串参数的命令,如: mycommand-arg1“非常长的字符串,不适合屏幕” 是否有可能以类似于使用\拆分独立参数的方式拆分它 我试过: mycommand-arg1“非常\ 长的\ 串\ 哪个……” 但这不起作用 mycommand是一个外部命令,因此不能修改为使用单个参数。您尝试过不使用引号吗 $ foo() { echo -e "1-$1\n2-$2\n3-$3"; } $ foo "1 \ 2 \ 3" 1-1 2 3 2- 3- $ foo 1 \ 2

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

mycommand-arg1“非常长的字符串,不适合屏幕”
是否有可能以类似于使用
\
拆分独立参数的方式拆分它

我试过:

mycommand-arg1“非常\
长的\
串\
哪个……”
但这不起作用


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

您尝试过不使用引号吗

$ 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

当你用双引号将其封装时,它会尊重你的反斜杠并忽略以下字符,但由于你用引号将整个内容包装起来,它会让它认为引号中的整个文本块应该被视为一个参数。

你可以将字符串赋给这样一个变量:

long_arg="my very long string\
 which does not fit\
 on the screen"
然后只需使用变量:

mycommand "$long_arg"

在双引号中,删除了前面带有反斜杠的换行符。请注意,字符串中的所有其他空白都是有效的,即它将出现在变量中。

即使没有反斜杠,这也应该有效。你能描述一下“它不工作”是什么意思吗?@randomir:该命令不接受该字符串为有效字符串,并在解析该字符串时抛出错误;(这是传递给
pytest-k“keyword1或keyword2或keyword3…
)的关键字参数。更新:你是对的,我确认原始问题中的语法工作正常-结果是一个关键字以数字开头,并触发了
pytest
中的错误(显然是一个错误)。只要反斜杠是每行的最后一个字符,这几乎就是你想要的。但是,你不能缩进以下几行,因为这些空格仍然是字符串的一部分。@randomir:没有反斜杠,字符串是多行的,这不是OP愿意做的。我怀疑OP不希望缩进是字符串的一部分最后的论点。(在这种情况下,
cat
+herdoc可能会有所帮助,使用
我必须一直在用java运行任何东西的脚本中这样做,特别是在oracle下。我已经有了很长时间的命令字符串,所以我将参数分解为多个组,然后在引用的supergoups中分配这些组,以便实际调用在逻辑上是可读的,如果是y,则可以解析。)你通读了所有的设置。很痛苦,但有时是必要的…谢谢。我认为这对awk不起作用,但我使用单引号将变量设置为脚本,然后使用双引号引用它,尽管在awk脚本中有双引号,它仍然有效!谢谢。这种技术也适用于POSIX sh。