我想在bash脚本中嵌入一个这样的长命令:
mycommand \
--server myserver \
--filename extremely/long/file/name/that/i/would/like/to/be/able/to/break/up/if/possible \
--otherflag \
--anotherflag
Run Code Online (Sandbox Code Playgroud)
打破长文件名.
我能做到这一点:
# Insufficiently pretty
mycommand \
--server myserver \
--filename extremely/long/file/name/\
that/i/would/like/to/be/able/to/break/\
up/if/possible \
--otherflag \
--anotherflag \
Run Code Online (Sandbox Code Playgroud)
但它打破了流动.我会喜欢能够这样写:
# Doesn't work
mycommand \
--server myserver \
--filename extremely/long/file/name/\
that/i/would/like/to/be/able/to/break/\
up/if/possible \
--otherflag \
--anotherflag
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为它打破了字符串文字.
有没有办法告诉bash打破字符串文字但忽略任何前导空格?
Chr*_*uma 52
这有点像黑客,但这有效:
mycommand \
--server myserver \
--filename "extremely/long/file/name/"`
`"that/i/would/like/to/be/able/to/break/"`
`"up/if/possible" \
--otherflag \
--anotherflag
Run Code Online (Sandbox Code Playgroud)
Bash连接相邻的字符串文字,因此我们利用它.例如,echo "hi" "there"打印hi there而echo "hi""there"不是打印hithere.
它还利用了反引号操作符,以及一堆空格评估为空的事实.
Wil*_*lQu 44
您可以使用变量:
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
Run Code Online (Sandbox Code Playgroud)
将长字符串写入变量同时保持最大行长度的另一种方法:
printf -v fname '%s' \
'extremely/long/file/name/that/i/' \
'would/like/to/be/able/to/break/up/' \
'if/possible'
Run Code Online (Sandbox Code Playgroud)
因为参数比格式化指令多,%s所以只是重复,我们得到
$ declare -p fname
declare -- fname="extremely/long/file/name/that/i/would/like/to/be/able/to/break/up/if/possible"
Run Code Online (Sandbox Code Playgroud)
可以像这样使用
$ declare -p fname
declare -- fname="extremely/long/file/name/that/i/would/like/to/be/able/to/break/up/if/possible"
Run Code Online (Sandbox Code Playgroud)
当设置具有本质上分离的内容的长变量时,这非常方便,例如CDPATH(或者PATH,当然):
mycommand \
--server myserver \
--filename "$fname" \
--otherflag \
--anotherflag
Run Code Online (Sandbox Code Playgroud)
相对于
printf -v CDPATH '%s' \
':/Users/benjamin/here/is/a/long/path' \
':/Users/benjamin/and/here/is/another/one' \
':/Users/benjamin/and/a/third/line'
export CDPATH
Run Code Online (Sandbox Code Playgroud)
或笨重的
export CDPATH=':/Users/benjamin/here/is/a/long/path:/Users/benjamin/and/here/is/another/one:/Users/benjamin/and/a/third/line'
Run Code Online (Sandbox Code Playgroud)