Переменная с '-' (минус сигналы) в Bash - PullRequest
1 голос
/ 24 июня 2011

Это все так просто ...

FOLDER='/home/user/.ssh'
SSH="$FOLDER/local-rsync-key.pub"
if [ -f "$SSH" ]; then
...

Похоже, что Bash рассматривает '-' как минус, а оператор IF всегда терпит неудачу ... Как я могу написать эту переменную правильноспособ?

ОБНОВЛЕНИЕ: Это еще один реальный пример:

Я пытаюсь переименовать файлы с "-" перед именем файла, например: "-0001.jpg"

Однако все, что я пытаюсь запустить:

for i in *; do mv "$i" "${i//-/}"; done

или:

for i in *; do mv "$i" "${i#*-}"; done

Я получил эту ошибку:

mv: invalid option -- '0'
Try `mv --help' for more information.

Спасибо за любой свет!

Ответы [ 3 ]

3 голосов
/ 24 июня 2011

Вы не должны иметь $ перед вашим SSH назначением, , которое необходимо только тогда, когда вы используете переменную.Без этого все работает нормально, как в следующей расшифровке:

pax> touch abc-xyz

pax> ll a*
-rw-r--r-- 1 pax paxgrp 0 2011-06-24 05:15 abc-xyz

pax> FOLDER=.

pax> $SSH="$FOLDER/abc-xyz"
bash: =./abc-xyz: No such file or directory

pax> SSH="$FOLDER/abc-xyz"

pax> if [ -f "$SSH" ]
...> then
...>     echo yes
...> fi
yes

pax> _
2 голосов
/ 02 июля 2011

Ответ заключается в том, чтобы использовать «-» (не указывая больше опций) после «mv» или «./» перед именем файла (указывая, что речь идет о файле).Например:

for i in *; do mv -- "$i" "${i#*-}"; done

или:

for i in *; do mv -- "$i" "./${i#*-}"; done
1 голос
/ 24 июня 2011

В синтаксисе bash, когда вы устанавливаете переменную просто используйте имя переменной:

VAR=value

Когда вы ссылаетесь на переменную, используйте $префикс:

echo $VAR

Ваш код имеет префикс случайного знака доллара, в котором вы пытаетесь установить переменную SSH.Черточки внутри переменной не должны быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...