【问题标题】:path split string with and without subirs带有和不带子目录的路径拆分字符串
【发布时间】:2017-05-31 09:09:04
【问题描述】:

如果 if 在 / 之后,如何拆分这个字符串?

我有这样的路径:

/HDD1/Movies/Excursion.2016/
/HDD1/Movies/Excursion.2016/name1
/HDD1/Movies/Excursion.2016/name2
/HDD1/Movies/Excursion.2016/name3

我的脚本:

d=/HDD1/Movies/Excursion.2016/
dname=${d#/*/}
dname=${dname%/*}
echo $dname

输出:电影/Excursion.2016

d=/HDD1/Movies/Excursion.2016/name1
dname=${d#/*/}
dname=${dname%/*}
echo $dname

输出:电影/Excursion.2016

我总是想要一切/电影/

例子:

d=/HDD1/Movies/Excursion.2016/
output : Excursion.2016

d=/HDD1/Movies/Excursion.2016/name1
output : Excursion.2016/name1

d=/HDD1/Movies/Excursion.2016/name2
output : Excursion.2016/name2

【问题讨论】:

  • 再添加一个%:dname=${dname%%/*}
  • so dname=${dname%%/*} 它的输出: Movies ,目录 Movies 也可以不同

标签: string bash variables split sh


【解决方案1】:

试试这个(警告,使用了特定于 bash 的语法):

main_dir=/HDD1
complete_path="$main_dir/Movies/Excursion.2016/name2"
if
  [[ "$complete_path" =~ $main_dir/[^/]+/(.+)$ ]]
then
  echo "${BASH_REMATCH[1]}"
else
  echo "Path not valid" >&2
fi

【讨论】:

  • 在你的脚本中,目录是硬编码的,怎么会有不同呢?请多描述一下您的预期用途。
  • 我无法设置 main_dir main_dir=/HDD1/Movies,只有 HDD1 无法设置为 main_dir。目录电影必须多变
  • 我修改了我提出的解决方案,以便 /HDD1 之后的一级目录是“浮动的”(忽略)。如果您想了解更多关于使用的 bash 语法的信息(条件 [[ ]] 与模式匹配),请发表评论。
猜你喜欢
  • 2019-02-03
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
相关资源
最近更新 更多