bash – ln se queja de que no existe tal archivo o directorio

Soy nuevo en la programación de shell en macosx y tengo un pequeño problema. He escrito el siguiente script de shell:

#!/bin/sh

function createlink {
source_file=$1

target_file="~/$source_file"

if [[ -f $target_file ]]; then
    rm $target_file
fi

ln $source_file $target_file
}

createlink ".netrc"

Cuando estoy ejecutando este script, aparece el mensaje ln: ~ / .netrc: ¡No existe tal archivo o directorio y no sé por qué sucedió esto! ¿Ves el error? ¡Gracias!

Mejor respuesta
El problema es que la expansión de tilde no ocurrirá ya que la ruta está en un valor variable (la expansión de tilde ocurre antes de la expansión de variable). Puede mejorar este problema utilizando $ HOME en lugar de ~. Es decir

target_file="${HOME}/${source_file}"

Esto debería solucionar tu problema.

Lectura adicional: sección de expansión de man bash

Por favor indique la dirección original:bash – ln se queja de que no existe tal archivo o directorio - Código de registro