在tcsh中,我可以按照以下方式从路径的末尾提取第二个路径元素
cd /some/long/directory/structure/path/
set x=`pwd`
echo ${x:h:h:t}
directory
我如何在bash中做同样的事情?
我的意思是,bash也有这种修饰符吗?
答案 0 :(得分:3)
csh
样式的修饰符可以与历史记录扩展一起使用(毫不奇怪,因为历史记录扩展是从csh
借用的。)
$ cd /some/long/directory/structure/path/
$ echo !!:1:h:h:t
echo directory
directory
!!:1
选择上一条命令的单词1(从零开始计数),因此选择cd
的参数。
({echo directory
出现在标准错误上,因为外壳默认在实际执行结果命令之前显示历史扩展的结果。)
答案 1 :(得分:1)
在非交互式bash脚本中,@ chepner的答案中的历史记录扩展命令通常将不可用。但是,您确实有参数扩展,例如:
$ cd /some/long//directory///structure/path/
$ set x=$(pwd)
$ echo $x
/some/long/directory/structure/path
$ y=${y%/*/*} # each /* is equivalent to one :h
$ y=${y##*/} # equivalent to :t
$ echo $y
directory
答案 2 :(得分:0)
cd /some/long/path/somewhere
x=$PWD
basename "$(dirname "$x")"
> path
dirname获取参数的父文件夹的绝对路径。 basename获取参数的名称。
编辑:记住了比以前更好的方法。