2017-11-05 9 views

答えて

5

代わりprocess substitutioncommand substitutionを使用します。

echo "$(basename "$(readlink -f "./symlink")")" 

か、それはあなたの完全なラインだ場合、echoが冗長である:

basename "$(readlink -f "./symlink")" 

複数$(..)コマンド置換任意のエスケープせずを入れ子にすることができます(古い形式のバッククォート版とは異なります)。また、置換が二重引用符で囲まれていると、単語の分割とファイル名の拡張は結果に対して実行されません。

が違いを明確にする:はファイルに 利用できるようになる結果をあなたが<(cmd)を言うときcmdが実行され、/dev/fd/63のように、何かを返すためにどの処理します。 basenameは、その内容ではなく与えられたファイル名で動作するので、63を返します。

$(cmd)は、プロセス置換とは異なり、cmdを実行し、コマンドの結果(標準出力)を返します。 res=$(cmd)のような変数に格納するか、cmd "$(cmd)"のようなインプレースで再利用できます。

関連する問題