在bash中修剪尾随和前导斜线-是否加入参数替换?

whi*_*fin 6 bash shell sh

我正在尝试/从bash中的字符串的开头和结尾修剪可能的内容。

我可以通过以下方式完成此操作:

string="/this is my string/"
string=${string%/}
string=${string#/}
echo $string # "this is my string"
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有一种方法可以将这两行(2 + 3)连接起来以一次替换两者。是否有加入替代的方法,还是我将获得的最好的替代方法?

提前致谢。

Sto*_*oud 7

来这很晚了...您可以使用bash变量替换来删除前导OR尾随可选的斜杠,但不能同时执行这两个操作。如果执行:

VAR1=/one/two/
VAR2=one/two
echo ${VAR1} ${VAR2}
echo ${VAR1#/} ${VAR2#/}
echo ${VAR1%/} ${VAR%/}
Run Code Online (Sandbox Code Playgroud)

然后我们得到:

/one/two/ one/two            # No change
one/two/ one/two             # No leading slashes
/one/two /one/two            # No trailing slashes
Run Code Online (Sandbox Code Playgroud)

如我们所见,变量内部的斜杠保持不变

您可以使用中间变量将它们组合为:

VAR3=${VAR1#/}               # Remove optional leading slash
VAR3=${VAR3%/}               # Remove optional trailing slash
echo ${VAR3}
Run Code Online (Sandbox Code Playgroud)


kon*_*box 5

不幸的是,没有办法做到这一点。但是,如果您确定您的字符串以 / 开头并以 / 结尾,则可以按${P:M:N}格式对其进行修剪:

string='/this is my string/'
string=${string:1:(-1)}
Run Code Online (Sandbox Code Playgroud)

添加检查也可能有所帮助,但它仍然是两个语句:

[[ $string == /*/ ]] && string=${string:1:(-1)}
Run Code Online (Sandbox Code Playgroud)

注意:解决方案仅从 Bash 4.2 开始可用。