16

このtest/90_2a5/Windowsのようなパスが与えられた場合

コマンドを使用してパスを取得し、その後に名前を取得して、結果90_2a5を取得しようとしています。dirnamebasename

dirnameこの問題は、結果を からにパイプしようとして 1 行で作成しようとすると発生しbasenameます。

私はこれを試しましたが、間違った方法で使用しているようです。

path="test/90_2a5/Windows"   
finalName= basename var | dirname $path  
echo "$finalName"

問題は、finalNameが空の文字列であることです。つまり、結果dirnameがリダイレクトされません。

4

4 に答える 4

31

それらをパイプするのではなく、パラメーターとして渡します。

finalName=$(basename -- "$(dirname -- "$path")")

一部のコマンドは、入力ストリームをまったく受け入れず、パラメーターのみを受け入れます。

$ echo foo/bar | basename
basename: missing operand
Try `basename --help' for more information.
$ basename foo/bar
bar
于 2013-05-31T10:49:09.437 に答える
29
$ echo 'test/90_2a5/Windows' | xargs dirname | xargs basename
90_2a5
于 2014-07-14T06:51:23.370 に答える
2

実際には、dirnameまたはbasenameのような外部プログラムなしで、bash 文字列操作操作を使用するだけで実行できます。

path="test/90_2a5/Windows"
# delete from last / to end
dir=${path%/*}
# delete from beginning to last /
finalName=${dir##*/}   
echo "$finalName"
于 2013-05-31T11:37:13.363 に答える