shell获取当前目录名的几种方法

拈花ヽ惹草 提交于 2019-12-10 06:06:29

1.basename

 

basename `pwd`

2.echo

You can use parameter substitution with the ${var##pattern} syntax, which removes from $var the longest part of $Pattern that matches the front end of $var. Take a look at an example:

 

echo ${PWD##*/}

3.awk

 

A more elaborate solution uses a combination of awk (a pattern-scanning utility) and rev (a utility that reverses lines from a file or from stdin):

cd /usr/share/cups/data

pwd | rev | awk –F \/ '{print $1}' | rev

data

 

It's a lot easier to understand this kind of script step by step:

pwd

/usr/share/cups/data

pwd | rev 

atad/supc/erahs/rsu/

pwd | rev | awk –F \/ '{print $1}'

atad

pwd | rev | awk –F \/ '{print $1}' | rev

data

 

The -F option indicates that you should separate by fields, where the field delimiter is /, and that you should print field 1.

4.sed

 

Finally, you can parse pwd output in the stream editor sed using an elaborate regular expression. This approach may be educational, but it's not practical:

cd /home/smith/music

pwd | sed 's,^\(.*/\)\?\([^/]*\),\2,'

music


For a better understanding of how this works, remove the escape character (\), which is required for special characters such as "(":


sed 's,^(.*/)?([^/]*),\2,'


s substitutes one string for another. It looks for two patterns, which are indicated between the first comma and the second comma. The first pattern (^(.*/)?) searches from the beginning of the line (^) until the last occurrence that it finds of / (in the example, it matches /home/smith/). The second pattern (([^/]*)) searches everything from the last pattern except the / character , which is indicated by [^/]*, where ^ at the beginning of the square brackets means not. This results in both /home/smith/ and music. The second part of this regular expression is the substitution, indicated by \2. In sed, this is called a back reference. As its name implies, it goes back and recalls a previously used reference. There may be nine of these, named \1, \2, \3, and so on. In the example, \2 refers to the second pattern found, which is music -- the result expected.


As you can see, Linux gives you many ways to find a directory name. Having many choices for the same chore is one of its strengths.


Sergio Gonzalez Duran is a Linux administrator, systems developer, and network security counselor who also teaches Linux courses and publishes the Spanish-oriented Linux and open source Web site linuxtotal.com.mx.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!