如何将字符串分布在多行中

How to spread string across multiple lines

假设我有一个脚本 script.py 接受一些命令行参数,还有一个 bash 脚本 main.sh 用下面定义的多个组合调用它。现在与我下面的示例相反,变量 MYARGSMOREARGS 包含更多参数(10-20 左右)。出于这个原因,我认为将这些字符串分成多行,每行一对 argument/value 会更具可读性。有没有办法使用多行字符串,或者有什么方法可以分解它?

MYARGS="--a=\"asdf\" --b=2.61828" # <- break this into two or more lines?
MOREARGS="--c 31415"
python script.py $MYARGS
python script.py $MYARGS $MOREARGS

其中 script.py

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--a')
parser.add_argument('--b')
parser.add_argument('--c')
args = parser.parse_args()
print(args)

带引号的字符串可以跨越多行。这个脚本:

MYARGS="-a=asdf
-b=2.1828
-c=foo
"

echo $MYARGS

作为输出生成:

-a=asdf -b=2.1828 -c=foo

这工作正常,但当您的参数包含空格时,它最终会变得棘手。在这种情况下,通常使用 arrays 更有意义,假设您正在使用 Bash(或另一个现代 shell):

MYARGS=(
    -a="this has whitespace"
    -b=2.1828  # I can even include inline comments!
    -c=foo
)
MOREARGS="--c 31415"

python script.py "${MYARGS[@]}"
python script.py "${MYARGS[@]}" $MOREARGS

上面MYARGS是数组,MOREARGS是简单的标量变量