这很简单......
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.
感谢任何光明!
答案 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变量。变量内的破折号应该没问题。