readlink
adalah standar bash untuk mendapatkan jalur absolut. Ini juga memiliki keuntungan mengembalikan string kosong jika jalur atau jalur tidak ada (diberi bendera untuk melakukannya).
Untuk mendapatkan jalur absolut ke direktori yang mungkin atau mungkin tidak ada, tetapi siapa orang tuanya ada, gunakan:
abspath=$(readlink -f $path)
Untuk mendapatkan jalur absolut ke direktori yang harus ada bersama semua orang tua:
abspath=$(readlink -e $path)
Untuk membuat kanonikalisasi jalur yang diberikan dan mengikuti symlink jika kebetulan ada, tetapi jika tidak abaikan direktori yang hilang dan tetap kembalikan jalurnya, itu adalah:
abspath=$(readlink -m $path)
Satu-satunya downside adalah bahwa readlink akan mengikuti tautan. Jika Anda tidak ingin mengikuti tautan, Anda dapat menggunakan konvensi alternatif ini:
abspath=$(cd ${path%/*} && echo $PWD/${path##*/})
Itu akan chdir ke bagian direktori $ path dan mencetak direktori saat ini bersama dengan bagian file $ path. Jika gagal chdir, Anda mendapatkan string kosong dan kesalahan pada stderr.
/foo/bar
atau bahkan/foo
benar - benar ada, atau apakah Anda hanya tertarik pada aspek manipulasi string sesuai dengan aturan nama jalur?