代わりprocess substitutionのcommand substitutionを使用します。
echo "$(basename "$(readlink -f "./symlink")")"
か、それはあなたの完全なラインだ場合、echo
が冗長である:
basename "$(readlink -f "./symlink")"
複数$(..)
コマンド置換任意のエスケープせずを入れ子にすることができます(古い形式のバッククォート版とは異なります)。また、置換が二重引用符で囲まれていると、単語の分割とファイル名の拡張は結果に対して実行されません。
が違いを明確にする:はファイルに
利用できるようになる結果をあなたが<(cmd)
を言うときcmd
が実行され、、/dev/fd/63
のように、何かを返すためにどの処理します。 basename
は、その内容ではなく与えられたファイル名で動作するので、63
を返します。 $(cmd)
は、プロセス置換とは異なり、cmd
を実行し、コマンドの結果(標準出力)を返します。 res=$(cmd)
のような変数に格納するか、cmd "$(cmd)"
のようなインプレースで再利用できます。
実際の質問に固有のタイトルを作成しようとしました。 –