我正在尝试找到一种方法来正确获取我当前所在的目录的名称。如果我在一个名为 HW04 的目录中并pwd打印出来home/zachary/HW04,我将如何只打印出 HW04?还是使用 pwd 来获得更多的名字?有更简单的方法吗?
提前致谢。
示例它会给你这样的
嘿尝试使用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 和其他一些操作系统中,pwd 命令(打印工作目录)将当前工作目录的完整路径名写入标准输出。该命令是大多数 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
也可以使用awk。
pwd | awk -F'/' '{print $NF}'
这只会为您提供当前文件夹的名称。