1

この質問で説明したように、現在の作業ディレクトリの名前を取得できます。しかし、最後から 2 つ後のディレクトリ名を取得するにはどうすればよいでしょうか。

シナリオ:

# working directory /etc/usr/abc/xyz.txt 
printf '%s\n' "${PWD##*/}" #prints abc
#i want to print usr
printf '%s\n' "%{PWD##*/-1}" #prints me whole path

これを行う方法を提案してください。

前もって感謝します。

4

2 に答える 2

7

古典的な方法は次のようになります。

echo $(basename $(dirname "$PWD"))

は、パスの最後のdirnameコンポーネントを削除します。残ってbasenameいるものの最後のコンポーネントを返します。${PWD##…}これには、 etc を使用した変数編集が必ずしも機能しないルート ディレクトリの近くで作業できるという追加のメリットがあります。

于 2014-12-17T05:58:04.243 に答える
4

何らかの理由で実行したいだけではなく、実際にこれに拡張を使用したいと仮定すると(ここbasename "$(dirname "$PWD")"の警告に注意してください)、使用したいと思うでしょう。

# Strip the current directory component off.
tmppwd=${PWD%/*}
# Strip all leading directory components off.
echo "${tmppwd##*/}"

しかし、リンクされたコメントの 1 つで言及されている配列拡張のトリックは巧妙です (ただし、グロビングなどの他の拡張プロパティのためにトリッキーです)。

于 2014-12-17T06:01:12.783 に答える