bash スクリプトの先頭に短い strcat 関数を定義し、インライン呼び出しを使用して物事を分割します。コマンド呼び出しでインラインで長いリテラルを定義できるため、個別の変数を使用するよりも、この方法を好む場合があります。
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 \
また、フラグ パラメータとして値の長い CSV を入力する必要がある場合にも、このアプローチが気に入っています。これを使用すると、値の間にコンマを入力する必要がなくなるからです。
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 \
これは
と同等ですmycommand \
--server myserver \
--csv_args "foo=hello,bar=world,this=arg has spaces in it" \
--otherflag \
--anotherflag \
変数を使用できます:
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
配列変数を使用することもできます
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
少しです ハックしますが、これは機能します:
mycommand \
--server myserver \
--filename "extremely/long/file/name/"`
`"that/i/would/like/to/be/able/to/break/"`
`"up/if/possible" \
--otherflag \
--anotherflag
Bash は隣接する文字列リテラルを連結するので、それを利用します。例:echo "hi" "there"
hi there
を出力します 一方 echo "hi""there"
hithere
を出力します .
また、バックティック演算子と、一連のスペースが何も評価されないという事実も利用しています。