在Bash中用' - '(减号)变量

时间:2011-06-23 21:11:48

标签: bash command-line-interface

这很简单......

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 个答案:

答案 0 :(得分:3)

您的$ 分配前不应该有SSH ,只有当您使用变量时才需要{/ 1}}。没有它,它可以正常工作,如下面的记录:

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> _

答案 1 :(得分:2)

答案是在文件名之前的“mv”或“./”之后使用“ - ”(表示没有更多选项)(表示它是关于文件的)。例如:

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

或:

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

答案 2 :(得分:1)

在bash语法中,当你设置变量时,只需使用变量名称:

VAR=value

引用变量时,请使用$前缀:

echo $VAR

您的代码有一个迷路的美元符号前缀,您尝试设置SSH变量。变量内的破折号应该没问题。