2012-07-20 49 views
2

我已经写了一个小文件,我用它来取文件的名字。shell脚本报价

#objectname 
echo "objectname" 
read ON 

不能变得更简单。

我对我得到的文件做了一些处理。

gpg -c --no-use-agent "$ON" 

例如,如果我有一个文件a.exe - >将对其进行加密,并给我一个文件有不同的MD5和扩展。现在,文件看起来是这样的a.exe.gpg

现在,如果我给它一个绑定文件的名称直接。

像这样的例子: 来自这个link

# This works 
fileName='a.exe.gpg' 
md5sum=$(md5sum ${fileName}) 
echo $md5sum 

它正常返回。

如果我想动态地做它会怎样。

这是我的尝试:

#does not work 
gpg -c --no-use-agent "$ON" 
fileName= `$ON.gpg` 
md5sum= $(md5sum ${fileName}) 
echo $md5sum 

我在这里得到这个错误:upload.sh: 1: upload.sh: Fire.exe.gpg: not found,程序不会退出。

请问我在做什么错误?

回答

3

的错误是在这里:

fileName= `$ON.gpg` 
  1. 应该有=后没有空间。 (也请看下一行。)
  2. 您使用的是反引号,其中执行$ON.gpg而不是简单评估它。反引号与$(...)相同,但不太优雅。为此使用双引号。

阅读Greg's wiki entry on quotes对于一个超级详细的解释和评论性的评论。 :-)

+0

非常感谢那个链接! – user1524529 2012-07-20 00:56:09

+0

我的荣幸。整个维基是迷人的,极具教育意义。它由FreeNode上的#bash频道经常出现的人维护。如果你去那里,准备受到侮辱*和*受过教育。 :-) – ghoti 2012-07-20 01:00:03

1

你疯狂修复文件名。

fileName="$ON.gpg" 
+0

我很抱歉,我现在有一个不同的错误: 'upload.sh:48:upload.sh:96b2edbf09638837d4c2feadb3d3bb3e:不found' – user1524529 2012-07-20 00:51:53

+0

我现在发现我的错误:)。 间距误差! – user1524529 2012-07-20 00:55:35

2

在shell脚本中进行赋值时要小心。请勿在operator=的任何一侧使用空格。请尝试以下操作:

fileName="$ON.gpg" 
md5sum=$(md5sum ${fileName}) 

注意变量和分配operator=是没有空间在一起。

此外,当您使用反引号作为`expression`时,它将像shell使用$(expression)那样执行,正如用户ghoti指出的那样。