Ich definiere eine kurze strcat-Funktion oben in meinem Bash-Skript und verwende einen Inline-Aufruf, um die Dinge aufzuteilen. Manchmal bevorzuge ich es, eine separate Variable zu verwenden, weil ich das lange Literal inline mit dem Befehlsaufruf definieren kann.
function strcat() {
local IFS=""
echo -n "$*"
}
mycommand \
--server myserver \
--filename "$(strcat \
extremely/long/file/name/ \
that/i/would/like/to/be/able/to/break/ \
up/if/possible)" \
--otherflag \
--anotherflag \
Ich mag diesen Ansatz auch, wenn ich eine lange CSV-Datei mit Werten als Flag-Parameter eingeben muss, weil ich damit vermeiden kann, das Komma zwischen den Werten einzugeben:
function strjoin() {
local IFS="$1"
shift
echo -n "$*"
}
csv_args=(
foo=hello
bar=world
"this=arg has spaces in it"
)
mycommand \
--server myserver \
--csv_args "$(strjoin , "${csv_args[@]}")" \
--otherflag \
--anotherflag \
Was äquivalent zu
istmycommand \
--server myserver \
--csv_args "foo=hello,bar=world,this=arg has spaces in it" \
--otherflag \
--anotherflag \
Sie können eine Variable verwenden:
file=extremely/long/file/name
file+=/that/i/would/like/to/be/able/to/break
file+=/up/if/possible
mycommand\
--server myserver\
--filename $file\
--flag flag
Man kann auch eine Array-Variable verwenden
file=(extremely/long/file/name
/that/i/would/like/to/be/able/to/break
/up/if/possible)
IFS=''
echo mycommand\
--server myserver\
--filename "${file[*]}"\
--flag flag
Es ist ein etwas hacken, aber das funktioniert:
mycommand \
--server myserver \
--filename "extremely/long/file/name/"`
`"that/i/would/like/to/be/able/to/break/"`
`"up/if/possible" \
--otherflag \
--anotherflag
Bash verkettet String-Literale, die benachbart sind, also machen wir uns das zunutze. Beispiel:echo "hi" "there"
gibt hi there
aus wohingegen echo "hi""there"
gibt hithere
aus .
Es nutzt auch den Backtick-Operator und die Tatsache, dass eine Reihe von Leerzeichen nichts ergibt.