comando bash call no valor $ var

0

Sou novo no shell de scripts e percorri este guia rápido:

link

que foi útil, mas deixou muitas perguntas sobre como trabalhar com variáveis sem resposta. Minha frustração atual está tentando usar uma variável que armazena um caminho em comandos.

Por exemplo, o seguinte script:

#!/bin/bash

iTunesU_Source="~/Music/iTunes/iTunes\ Media/iTunes\ U/"
ls -al $iTunesU_Source

iTunesU_Source_symlink="~/Music/iTunes_U/"
ls -al $iTunesU_Source_symlink

ls -al ~/Music/iTunes/iTunes\ Media/iTunes\ U/

Imprime:

ls: Media/iTunes\: No such file or directory
ls: U/: No such file or directory
ls: ~/Music/iTunes/iTunes\: No such file or directory
ls: ~/Music/iTunes_U/: No such file or directory
total 0
drwxr-xr-x   7 me  staff  238 Mar  8 10:06 .
drwxr-xr-x  11 me  staff  374 Mar  8 11:13 ..
drwxr-xr-x  27 me  staff  918 Mar  8 08:44 Game Theory - Audio
drwxr-xr-x   3 me  staff  102 Mar  8 10:03 Introduction to Algorithms
drwxr-xr-x  23 me  staff  782 Mar  8 12:17 Machine Learning
drwxr-xr-x   3 me  staff  102 Mar  8 10:06 Machine Learning-Stanford

Como obtenho o comando (ls / cd / etc ...) para aceitar o valor da variável como para entrada direta?

    
por baiano 08.03.2013 / 21:35

1 resposta

1

A solução simples:

iTunesU_Source="~/Music/iTunes/iTunes Media/iTunes U/"

Por que isso? Nesta linha:

iTunesU_Source="~/Music/iTunes/iTunes\ Media/iTunes\ U/"

Você está definindo o valor da variável para uma string entre aspas. Entre aspas, o espaço em branco já está preservado. Então, o conteúdo da sua variável será, literalmente:

~/Music/iTunes/iTunes\ Media/iTunes\ U/

As barras invertidas são necessárias apenas para escapar dos espaços em branco em strings sem aspas, então você pode ter quase escrito assim:

iTunesU_Source=~/Music/iTunes/iTunes\ Media/iTunes\ U/

A diferença é que no primeiro comando, o ~ não é expandido pelo shell para o seu diretório inicial, enquanto no segundo comando a variável iTunesU_Source é atribuída /Users/username . Então, nesse caso, sua variável é válida:

/Users/username/Music/iTunes/iTunes\ Media/iTunes\ U/

Leia mais sobre citações aqui:

por 08.03.2013 / 21:52