Я новичок в сценариях оболочки и прошел это краткое руководство:

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html

это было полезно, но оставило много вопросов о работе с переменными без ответа. Моя текущая разочарование пытается использовать переменную, которая хранит путь в командах.

Например, следующий скрипт:

#!/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/

Распечатывает:

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

Как получить команду (ls/cd/etc ...), чтобы она принимала значение переменной так же, как и для прямого ввода?

1 ответ1

1

Простое решение:

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

Это почему? В этой строке:

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

Вы устанавливаете значение переменной в строку в кавычках. В кавычках пробелы уже сохранены. Итак, содержимое вашей переменной будет буквально:

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

Обратные косые черты только необходимы , чтобы избежать пробелов в строках без кавычек, так что вы могли бы почти написали это как:

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

Разница в том, что в первой команде ~ не раскрывается оболочкой в ваш домашний каталог, тогда как во второй команде вашей переменной iTunesU_Source назначается /Users/username . Так что в этом случае ваша переменная содержит:

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

Подробнее о цитировании здесь:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .