Saya mendefinisikan fungsi strcat pendek di bagian atas skrip bash saya dan menggunakan doa sebaris untuk memisahkan semuanya. Terkadang saya lebih suka menggunakan variabel terpisah karena saya dapat mendefinisikan literal panjang yang sejalan dengan pemanggilan perintah.
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 \
Saya juga menyukai pendekatan ini ketika saya harus memasukkan nilai CSV yang panjang sebagai parameter flag karena saya dapat menggunakannya untuk menghindari mengetik koma di antara nilai:
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 \
Yang setara dengan
mycommand \
--server myserver \
--csv_args "foo=hello,bar=world,this=arg has spaces in it" \
--otherflag \
--anotherflag \
Anda dapat menggunakan variabel :
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
Seseorang juga dapat menggunakan variabel array
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
Ini sedikit retas, tetapi ini berhasil:
mycommand \
--server myserver \
--filename "extremely/long/file/name/"`
`"that/i/would/like/to/be/able/to/break/"`
`"up/if/possible" \
--otherflag \
--anotherflag
Bash menggabungkan string literal yang berdekatan, jadi kami memanfaatkannya. Misalnya, echo "hi" "there"
mencetak hi there
sedangkan echo "hi""there"
mencetak hithere
.
Ini juga memanfaatkan operator backtick, dan fakta bahwa sekumpulan spasi tidak menghasilkan apa-apa.