3

我正在尝试找到一种方法来正确获取我当前所在的目录的名称。如果我在一个名为 HW04 的目录中并pwd打印出来home/zachary/HW04,我将如何只打印出 HW04?还是使用 pwd 来获得更多的名字?有更简单的方法吗?

提前致谢。

4

3 回答 3

1

示例它会给你这样的

嘿尝试使用basename home/zachary/HW04

使用 basename 使用 basename 命令是提取当前目录最简单、最简单的方法:

basename /usr/local/bin

OutPut 将是bin 但是,它在更改目录变量的 shell 脚本中没有用。您可以将其与反引号内的 pwd 结合使用以使其更具动态性:

cd /usr/local/binbasename pwd bin 使用参数替换和 echo bash 脚本语言充满了很好的技巧,包括参数替换,它允许您操作或扩展变量。您可以使用带有 ${var##pattern} 语法的参数替换,它会从 $var 中删除与 $var 的前端匹配的 $Pattern 中最长的部分。看一个例子:

cd /var/log/squidecho ${PWD##*/} squid PWD 是保存当前路径的环境变量,## 是告诉脚本删除它找到的所有内容到 */ 的指令。换句话说,它会删除最后一个 / 之前的所有内容,只留下最后一个字符串,这里是当前目录 squid。您可以在 Advanced Bash-Scripting Guide 中了解有关参数替换和其他操作变量的方法的更多信息。

使用 awk 和 rev 更复杂的解决方案结合使用 awk(模式扫描实用程序)和 rev(从文件或标准输入反转行的实用程序):

cd /usr/share/cups/datapwd | 转 | awk â€âF / '{print $1}' | rev data 一步一步理解这种脚本要容易得多:

密码 /usr/share/cups/data 密码 | rev atad/supc/erahs/rsu/密码 | 转 | awk ââ¬âF / '{print $1}' atad pwd | 转 | awk â€âF / '{print $1}' | rev data -F 选项表示您应该按字段分隔,其中字段分隔符是 /,并且您应该打印字段 1。

使用 sed 最后,您可以使用复杂的正则表达式在流编辑器 sed 中解析 pwd 输出。这种方法可能具有教育意义,但并不实用:

cd /home/smith/musicpwd | sed 's,^(./ )\?([^/] ),\2,' music 为了更好地理解其工作原理,请删除转义字符 (),它是特殊字符(例如“(”)所必需的:

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

密码。在类 Unix 和其他一些操作系统中,pw​​d 命令(打印工作目录)将当前工作目录的完整路径名写入标准输出。该命令是大多数 Unix shell 中的内置 shell,例如 Bourne shell、ash、bash、ksh 和 zsh。

pwd 显示当前工作目录。示例:/home/foobar

pwd -P 显示当前工作目录的物理路径——不带符号链接名,如果有的话。示例:如果站在目录 /home/symlinked 中,这是 /home/realdir 的符号链接,这将显示 /home/realdir

pwd -L 显示当前工作目录的逻辑路径 - 带有符号链接名称,如果有的话。示例:如果站在目录 /home/symlinked 中,这是 /home/realdir 的符号链接,这将显示 /home/symlinked

https://en.wikipedia.org/wiki/Pwd

于 2018-11-03T13:39:13.420 回答
1

你可以使用echo $(basename $(pwd))(或者只是basename $(pwd)如果你想打印它);请参阅basename(1)pwd(1)(可能是内置的 shell)和参考手册的命令替换部分。bash

您可能会找到一些 bash提示配置来设置提示来告诉您这些事情。

于 2018-11-02T00:20:42.157 回答
0

也可以使用awk

pwd | awk -F'/' '{print $NF}'

这只会为您提供当前文件夹的名称。

于 2018-11-03T13:36:04.960 回答