web-dev-qa-db-ja.com

Bash:長い文字列引数を複数の行に分割しますか?

次のような単一の長い文字列引数を取るコマンドを考えます:

mycommand -arg1 "very long string which does not fit on the screen"

\を使用して個別の引数を分割する方法と同様の方法で、何らかの方法で分割することは可能ですか?.

私は試した:

mycommand -arg1 "very \
    long \
    string \
    which ..."

しかし、これは機能しません。

mycommandは外部コマンドであるため、単一の引数を取るように変更することはできません。

17
ccpizza

次のように、文字列を変数に割り当てることができます。

long_arg="my very long string\
 which does not fit\
 on the screen"

次に、変数を使用します。

mycommand "$long_arg"

二重引用符内では、バックスラッシュが先行する改行は削除されます。文字列内の他のすべての空白は重要であることに注意してください。つまり、変数に存在します。

23
Tom Fenech

引用符なしで試しましたか?

$ 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

二重引用符でカプセル化すると、バックスラッシュを尊重し、次の文字を無視しますが、引用符で全体をラップしているため、引用符内のテキストのブロック全体を単一として扱う必要があると考えています引数。

2
Eremite