Bash-如果字符串中有第一个和最后一个斜杠,如何去掉它们?

Bash-如果字符串中有第一个和最后一个斜杠,如何去掉它们?,bash,Bash,最有效的方式是什么: 'a/b/c' 超出输入字符串,该字符串可以是以下任意一种: '/a/b/c/' 'a/b/c/' '/a/b/c' 'a/b/c' 在bash脚本中?我不知道“最有效”,但如果该字符串存储在变量a中(即$a展开为字符串),则可以执行以下操作: b=${a#/} # Remove possible leading / c=${b%/} # Remove possible trailing / echo "a/b/c/" | sed "s#^/\(.*\)#\1#" |

最有效的方式是什么:

'a/b/c'
超出输入字符串,该字符串可以是以下任意一种:

'/a/b/c/'
'a/b/c/'
'/a/b/c'
'a/b/c'
在bash脚本中?

我不知道“最有效”,但如果该字符串存储在变量
a
中(即
$a
展开为字符串),则可以执行以下操作:

b=${a#/} # Remove possible leading /
c=${b%/} # Remove possible trailing /
echo "a/b/c/" | sed "s#^/\(.*\)#\1#" | sed "s#\(.*\)/\$#\1#"

将所需字符串放入变量
c
。如果您的输入字符串包含如您在问题中所写的单引号,则此操作不起作用,但我怀疑您不打算指示此类引号在字符串中。

使用
sed
,您可以执行以下操作:

b=${a#/} # Remove possible leading /
c=${b%/} # Remove possible trailing /
echo "a/b/c/" | sed "s#^/\(.*\)#\1#" | sed "s#\(.*\)/\$#\1#"
示例:

$ echo "/a/b/c/" | sed "s#^/\(.*\)#\1#" | sed "s#\(.*\)/\$#\1#"
a/b/c
$ echo "a/b/c/" | sed "s#^/\(.*\)#\1#" | sed "s#\(.*\)/\$#\1#"
a/b/c
$ echo "/a/b/c" | sed "s#^/\(.*\)#\1#" | sed "s#\(.*\)/\$#\1#"
a/b/c
$ echo "a/b/c" | sed "s#^/\(.*\)#\1#" | sed "s#\(.*\)/\$#\1#"
a/b/c

这是一种技巧,但它只输出a/b/c,只要它存在于输入中

echo '/a/b/c/' | grep --only-matching 'a/b/c'

我建议使用case构造,对于这三种情况(加上一个默认情况),它应该非常简单。除此之外,还有像sed这样的东西。@UlrichEckhardt,我不熟悉bash语言,我在另一个问题中读到sed很慢,如果没有更好的选择,会使用它