Apakah ada cara saya dapat mendefinisikan kembali fungsi bash dalam hal definisi lamanya? Sebagai contoh saya ingin menambahkan blok kode berikut ke mukadimah fungsi command_not_found_handle ()
,
# Check if $1 is instead a bash variable and print value if it is
local VAL=$(eval echo \"\$$1\")
if [ -n "$VAL" ] && [ $# -eq 1 ]; then
echo "$1=$VAL"
return $?
fi
Saat ini didefinisikan dalam /etc/profile.d/PackageKit.sh dan bersumber dari skrip start-up bash.
Dengan cara itu saya dapat meminta nilai variabel lingkungan pada prompt perintah dengan hanya mengetikkan nama variabel (dan asalkan tidak ada perintah seperti itu dengan nama itu ada). misalnya
user@hostname ~:$ LANG
LANG=en_AU.utf8
Saya tahu saya hanya bisa menyalin dan menempelkan definisi saat ini dan menambahkan perubahan saya sendiri ~/.bashrc
, tetapi saya mencari cara yang lebih elegan yang melibatkan penggunaan kembali kode.
Cara yang lebih baik untuk mencapai sasaran atau peningkatan / ekstensi kode saya juga dihargai.
eval
, Anda dapat menggunakan tipuan:local VAL=$(echo ${!1})
Jawaban:
Anda dapat mencetak definisi fungsi saat ini, dan kemudian memasukkannya dalam definisi fungsi di dalam
eval
klausa.Pendekatan lain, yang saya temukan lebih jelas, adalah mendefinisikan fungsi asli dengan nama baru, dan menyebutnya dari definisi Anda. Ini hanya berfungsi jika Anda tidak perlu bertindak pada variabel lokal dari definisi asli.
sumber
declare -f
, tapi saya suka cara Anda mengganti nama func asli.Terima kasih @mat, @ dennis-williamson. Setelah membaca komentar Anda, inilah yang saya dapatkan
Meskipun saya pikir saya lebih suka solusi @Gilles.
sumber