Я пишу какой-то резервный скрипт, а целевой путь довольно длинный. Могу ли я определить что-то вроде этого?
TARGET='/media/user/externaldrive/folder with spaces/blahblah'
И затем использовать его как часть пути?
cp file.txt '$TARGET/some folder with spaces/file.txt'
Переменная может быть определена только для этого скрипта.
Каков правильный способ сделать это? Потому что это то, что я получаю:
cp: cannot create regular file ‘$TARGET/some folder with spaces/file.txt’: No such file or directory
Существуют определенные правила установки имени переменной в bash:
Имя Vaiables может содержать только символы из [[:alnum:]_], то есть A-Z, a-z, 0-9 и [ f8]. Имя переменной не может начинаться с цифрыТаким образом, получая значение переменной, если у вас нет ни одного из этих символов, следующего за переменной, вам не нужно {}, чтобы обернуть имя переменной:
$ 1foo=bar
1foo=bar: command not found
$ foo1=bar
$ echo "$foo1"
bar
$ echo "$foo12"
$ echo "${foo1}2"
bar2
$ echo "$foo1_"
$ echo "${foo1}_"
bar_
В вашем случае:
Имя Vaiables может содержать только символы из [[:alnum:]_], то есть A-Z, a-z, 0-9 и _. [ ! d2]Имя Vaiables может содержать только символы из [[:alnum:]_], т.е. A-Z, a-z, 0-9 и _.
Имя переменной не может начинаться с цифрыКороткий ответ: ДА! Вы получили это на 100% правильно. Хотя, если вы хотите сделать эту переменную доступной для других скриптов, не забудьте запустить export TARGET.