2017-03-08 1 views
0

J'essaie de comprendre pourquoibash - stockage chemin absolu à un fichier dans une variable

[-d ~/dir]; echo $?

retourne en effet 0, si dir existe et est un répertoire, mais

DIR = "~/dir"; [-d "$ {DIR}"]; echo $?

retourne toujours 1.

echo "$ {DIR}"

impressions ~/dir, comme prévu. On me donne un fichier texte contenant le chemin vers un autre fichier, et j'ai pensé que j'utiliserais cat pour stocker le contenu dans une variable. Quelle est la bonne façon de faire cela?

+0

http://stackoverflow.com/questions/3963716/how-to-manually-expand-a-special-variable-ex-tilde- in-bash/27485157 # 27485157 – ewcz

Répondre

0

L'expansion du tilde se produit avant l'expansion de la variable, voir EXPANSION dans man bash. ~ n'est pas un chemin réel, il est développé par le shell vers le chemin réel, mais cela ne se produit pas pour les chemins stockés dans une variable. Stocker le chemin d'accès complet réel dans la variable à la place.

+0

Maintenant, il est logique. Merci beaucoup! –

+0

"thank you" = upvote/accept :-) – choroba

+0

"Les suffrages exprimés par ceux ayant moins de 15 points de réputation sont enregistrés, mais ne modifient pas le résultat affiché publiquement." De plus, je n'ai pas été en mesure d'accepter une réponse aussi rapidement. Vous aurez votre crédit, ne vous inquiétez pas. –

0

pas vraiment une solution bash mais vous pouvez faire:

DIR="~/dir" ; 

#expand the tilde 
DIR=$(python -c "import os;print(os.path.expanduser('${DIR}'));"); 

[ -d "${DIR}" ] ; echo $?