在Linux中的变量中获取上一个目录路径

时间:2019-01-22 06:33:27

标签: sh

我正在尝试在linux脚本的变量中获取给定目录的父目录,但无法获取。

MN_CURR=/home/sshekhar/Desktop
MN_PREV=`$MN_CURR/..`
echo " Displayng $MN_PREV"

我正在使用CentOS。谁能帮忙吗?

1 个答案:

答案 0 :(得分:0)

根据我的评论,在使用POSIX shell时,尽管与bash,ksh或zsh等更高级的shell相比,参数扩展受到限制,但POSIX shell确实提供了扩展以处理字符串长度和子字符串删除。

在您的情况下,您要删除路径的最后一部分(后缀以'/'开头),并保留其父目录。为此,您可以使用:

MN_PREV=${MN_CURR%/*}

(将从右侧删除所有字符-直到最后一个'/',包括该字符)

可以在POSIX Programmers Guide - 2.6.2 Parameter Expansion上找到POSIX shell参数扩展的参考文档。有关字符串长度和子字符串删除的扩展为:

${#parameter}

字符串长度。必须替换参数值的字符长度。如果参数为'*' or '@',则扩展结果不确定。如果未设置parameter且set -u有效,则扩展将失败。

${parameter%[word]}

删除最小后缀模式。应扩展单词以生成模式。然后,参数扩展将产生参数,后缀的最小部分被模式删除。如果存在,则单词不得以不带引号的'%'开头。

${parameter%%[word]}

删除最大后缀模式。单词应扩展以生成模式。然后,参数扩展将产生参数,后缀的最大部分与模式匹配将被删除。

$ {parameter#[word]}

删除最小前缀模式。应扩展单词以产生模式。然后,参数扩展将导致参数被删除的前缀匹配的最小部分。如果存在,则单词不得以不带引号的“#”开头。

${parameter##[word]}

删除最大的前缀模式。应扩展单词以生成模式。然后,参数扩展将导致参数被删除,其中前缀的最大部分被模式所匹配。