Почему двойная кавычка в bash не может расширить '' ~ "? - PullRequest
0 голосов
/ 31 марта 2020

Сначала я попробовал:

#!/bin/bash

V8_FOLDER=~/workspace/v8

cd ${V8_FOLDER}

pwd

Работало нормально, вывод /home/myname/workspace/v8;

Но когда я попробовал это:

#!/bin/bash

V8_FOLDER="~/workspace/v8"

cd ${V8_FOLDER}

pwd

Там произошла ошибка, вывод: ./update_and_compile: line 5: cd: ~/workspace/v8: No such file or directory

Я думал, что двойная кавычка - это версия обновления без кавычек в сценарии оболочки, почему существует такая несовместимость? Если здесь что-то не так, каков правильный путь к компакт-диску в папке сценария оболочки?

bash версия: GNU bash, версия 4.4.20 (1) -релиз (x86_64-p c - linux -gnu)

Ответы [ 3 ]

3 голосов
/ 31 марта 2020

Я думал, что двойная кавычка - это обновленная версия без кавычек в сценарии оболочки, […]

Вы ошиблись.

Цель цитирование означает отключение специальных функций различных специальных символов. Например, если у вас есть файл с буквальным названием ~ (который я не рекомендую), вы можете ссылаться на него как \~ или '~' или "~". (Или, поскольку ~ является специальным только в начале слова, вы можете ссылаться на него как ./~.)

Важно использовать двойные кавычки вокруг расширений, таких как ${V8_FOLDER}, чтобы убедитесь, что различные специальные символы внутри результата не рассматриваются как специальные; но вы не можете использовать двойные кавычки, когда вам действительно нужно специальное поведение, которое они отключают, потому что они отключают его!

1 голос
/ 31 марта 2020

Вместо ~ используйте ${HOME} Любая цитата вокруг ~ предотвращает это расширение тильды.

0 голосов
/ 31 марта 2020

Вы можете заменить ~ на $HOME.

...