2011-06-23 85 views
1

这是如此简单而...变量,“ - ”(减号信号)中的Bash

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

它看起来是猛砸认为“ - ”为负信号和IF语句总是失败.. 。我怎样才能以正确的方式编写这个变量?

UPDATE: 这又是一个真实的例子:

我特林与重命名文件 “ - ” 在文件名的前面,例如: “-0001.jpg”

然而,everyime我尝试运行:

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. 

谢谢你的光!

+0

这似乎是[此](http://stackoverflow.com/questions/6557985/mv-invalid-option-0)quetion的副本。 – Lynch

回答

2

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

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

或:

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

值得注意的是,这适用于任何Linux工具。 'find'是一个明显的例外。 – l0b0

3

你不应该有一个$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> _ 
+0

我错误地忘了'$'标志,谢谢。 – Roger

1

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

VAR=value 

当你参考的变量,请使用$前缀:

echo $VAR 

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