2

我写了一个小脚本,我用它来命名一个文件。

#objectname
echo "objectname"
read ON

不能再简单了。

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

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

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

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

像这样的例子:取自:这个链接

# 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并且程序没有退出。

请问我到底错在哪里?

4

3 回答 3

3

错误在这里:

fileName= `$ON.gpg`
  1. 后面应该没有空格=。(另请看下一行。)
  2. 您使用了反引号,它执行 $ON.gpg而不是简单地评估它。反引号相同$(...)但不那么优雅。为此使用双引号。

阅读Greg 的 wiki 引用条目,以获得带有自以为是的评论的超详细解释。:-)

于 2012-07-20T00:54:19.767 回答
2

在 shell 脚本中进行分配时要小心。不要在operator=. 尝试以下操作:

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

请注意,变量和赋值operator=是在一起的,没有空格。

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

于 2012-07-20T00:54:53.093 回答
1

你搞砸了修复文件名。

fileName="$ON.gpg"
于 2012-07-20T00:49:47.287 回答