Menggunakan kutipan tunggal untuk menunda evaluasi berfungsi untuk mendefinisikan alias dinamis juga. Berikut ini alias,, t
digunakan untuk melampirkan shell baru ke proses ssh agent yang ada, yang dimulai dengan alias ssh-start
yang menulis kode shell ke file di homedir:
mymistress:~> which ssh-start
ssh-start: aliased to eval `ssh-agent | tee ~/.ssh/ssh-agent.out` ; ssh-add ~/.ssh/id_rsa
mymistress:~> grep "alias t" .zshrc
alias t="eval `cat ~/.ssh/ssh-agent.out`"
mymistress:~> which t
t: aliased to eval SSH_AUTH_SOCK=/tmp/ssh-nZBZp29804/agent.29804; export SSH_AUTH_SOCK;\nSSH_AGENT_PID=29805; export SSH_AGENT_PID;\necho Agent pid 29805;`
Definisi t
itu buruk karena menyebabkan informasi baru dari tahap awal ssh-start
diabaikan. Mengubah definisi alias t
untuk dikutip secara tunggal di .zshrc saya memberikan perilaku yang jauh lebih baik:
mymistress:~> grep "alias t" .zshrc
alias t='eval `cat ~/.ssh/ssh-agent.out`'
mymistress:~> source ~/.zshrc
mymistress:~> which t
t: aliased to eval `cat ~/.ssh/ssh-agent.out`
Perhatikan perluasan definisi t
seperti yang disediakan oleh which t
, yang menunjukkan efek tanda kutip ganda (ekspansi langsung di tempat atau variabel lingkungan) vs tanda kutip tunggal (evaluasi tertunda perintah dan variabel).