2011-06-23 80 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變量。變量內的破折號應該沒有問題。