143 bash indentation line
你如何使用bash延续线?
我意识到你可以这样做:
echo "continuation \
lines"
>continuation lines
Run Code Online (Sandbox Code Playgroud)
但是,如果你有缩进代码,它不能很好地工作:
echo "continuation \
lines"
>continuation lines
Run Code Online (Sandbox Code Playgroud)
Ray*_*oal 149
这是你可能想要的
$ echo "continuation"\
> "lines"
continuation lines
Run Code Online (Sandbox Code Playgroud)
如果这创建了两个echo参数而你只想要一个,那么让我们看看字符串连接.在bash中,将两个字符串放在彼此旁边连接:
$ echo "continuation""lines"
continuationlines
Run Code Online (Sandbox Code Playgroud)
所以没有缩进的延续行是分解字符串的一种方法:
$ echo "continuation"\
> "lines"
continuationlines
Run Code Online (Sandbox Code Playgroud)
但是当使用缩进时:
$ echo "continuation"\
> "lines"
continuation lines
Run Code Online (Sandbox Code Playgroud)
你得到两个参数,因为它不再是连接.
如果你想要一个跨越行的单个字符串,在缩进但没有获得所有这些空格的情况下,你可以尝试的一种方法是抛弃延续行并使用变量:
$ a="continuation"
$ b="lines"
$ echo $a$b
continuationlines
Run Code Online (Sandbox Code Playgroud)
这将允许您以额外的变量为代价来使用干净的缩进代码.如果你把变量设为局部变量,那应该不会太糟糕.
tri*_*eee 27
这里带有<<-HERE终结符的文档适用于缩进的多行文本字符串.它将从此处的文档中删除任何前导选项卡.(但终止线仍将保留.)
cat <<-____HERE
continuation
lines
____HERE
Run Code Online (Sandbox Code Playgroud)
另见http://ss64.com/bash/syntax-here.html
如果你需要保留一些(但不是全部)领先的空格,你可能会使用类似的东西
sed 's/^ //' <<____HERE
This has four leading spaces.
Two of them will be removed by sed.
____HERE
Run Code Online (Sandbox Code Playgroud)
为了在很多行上包装长复杂的字符串,我喜欢tr:
tr -d '\012' <<-____
continuation
lines
____
Run Code Online (Sandbox Code Playgroud)
Cyb*_*aut 11
在某些情况下,利用 Bash 的串联能力可能是合适的。
temp='this string is very long '
temp+='so I will separate it onto multiple lines'
echo $temp
this string is very long so I will separate it onto multiple lines
Run Code Online (Sandbox Code Playgroud)
名称=[值]...
...在赋值语句将值赋给 shell 变量或数组索引的上下文中,+= 运算符可用于追加或添加到变量的先前值。当 += 应用于已设置整数属性的变量时, value 将作为算术表达式进行计算,并添加到变量的当前值上,该值也会被计算。当使用复合赋值将 += 应用于数组变量时(请参阅下面的数组),该变量的值不会取消设置(与使用 = 时一样),并且新值会从比数组最大索引大 1 的位置开始附加到数组中(对于索引数组)或作为附加键值对添加到关联数组中。 当应用于字符串值变量时,值会扩展并附加到变量的值中。
您可以使用bash数组
$ str_array=("continuation"
"lines")
Run Code Online (Sandbox Code Playgroud)
然后
$ echo "${str_array[*]}"
continuation lines
Run Code Online (Sandbox Code Playgroud)
还有一个额外的空间,因为(在bash手册之后):
如果单词是双引号,则
${name[*]}扩展为单个单词,每个数组成员的值由IFS变量的第一个字符分隔
所以设置IFS=''摆脱额外的空间
$ IFS=''
$ echo "${str_array[*]}"
continuationlines
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
147468 次 |
| 最近记录: |