awkawkfonksiyonları çalıştırabilir . O çalışması için bashfonksiyonlar, Size gereken tek şey awkbir yürütme basholduğunu, kabuk bashtarafından çıkarılan değerle, bu işlevin tanımını yorumlamak ve bu işlevi çağırmak awkargüman olarak geçti.
Önemsiz değil.
bashdışa aktarma işlevlerini destekler bash, böylece sonraki çağrılarında kullanılabilir , bu nedenle işlev tanımını bashçağrılan kişiye iletmenin bir yolu awk:
export -f d2h
awkBir komutu ( bashburada) yürütmenin tek yolu system("cmd"), veya print... | "cmd"veya iledir "cmd" | getline. Her durumda, awkbunu yorumlamak için bir kabuk çalıştırır cmd, ancak sholmayacak bash. Bunun için bir komut satırı oluşturmalısınız sh, bunun için işlevi çağırmak için bashbir bashkomut satırını yorumlayan bir çağrıdır , bu yüzden alıntı yapmak için dikkatli olmanız gerekir:
export -f d2h
<file awk -v q="'" '
function shquote(s) {
gsub(q, q "\\" q q, s)
return q s q
}
{print $1; system("bash -c '\''d2h \"$1\"'\'' bash " shquote($2))}'
Bu, her bir hat için bir shve bir kez koşmak anlamına gelir bash, bu yüzden oldukça verimsiz olacaktır. Bu bash, okuma yapmaktan ve a ile bölmekten çok daha fazla verimsiz olmakla sonuçlanır while read loop:
(unset IFS; while read -r a b rest; do
printf '%s\n' "$a"
d2h "$b"
done < file)
d2hçalıştırılabilir olsa da işe yarayabilir , ancak "ya .bashrc'de ya da kabuk komut dosyasında tanımlanmış bir işlev" değilse işe yaramadı .