我正在尝试在linux脚本的变量中获取给定目录的父目录,但无法获取。
MN_CURR=/home/sshekhar/Desktop
MN_PREV=`$MN_CURR/..`
echo " Displayng $MN_PREV"
我正在使用CentOS。谁能帮忙吗?
答案 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]}
删除最大的前缀模式。应扩展单词以生成模式。然后,参数扩展将导致参数被删除,其中前缀的最大部分被模式所匹配。