2011-06-23 9 views
1

では、これは非常に単純な、まだ...変数「 - 」(マイナス信号)バッシュ

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

これは、bashが考えていることになります「 - 」マイナス信号と常にが失敗したIF文として..どのようにしてこの変数を正しい方法で書くことができますか?

UPDATE: これは別の本当の例です:私は、ファイルの名前を変更するトリングい

" - " ファイル名の前に、例えば: "-0001.jpg"

しかしを、everyime I実行しよう:

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割り当て、の前で$を持つべきではありません。それがなければ、それは次転写物のように、正常に動作します:bashの構文で

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

、あなたはだけの変数名を使用変数を設定する場合:いつ参照

VAR=value 

echo $VAR 

あなたのコードは、浮遊ドルのSIを持っている:変数、$接頭辞を使用SSH変数を設定しようとしている接頭辞gn。変数内のダッシュは問題ありません。

関連する問題