shell脚本报价
我已经写了一个小文件,我用它来取文件的名字。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
,程序不会退出。
请问我在做什么错误?
的错误是在这里:
fileName= `$ON.gpg`
- 应该有
=
后没有空间。 (也请看下一行。) - 您使用的是反引号,其中执行
$ON.gpg
而不是简单评估它。反引号与$(...)
相同,但不太优雅。为此使用双引号。
阅读Greg's wiki entry on quotes对于一个超级详细的解释和评论性的评论。 :-)
你疯狂修复文件名。
fileName="$ON.gpg"
我很抱歉,我现在有一个不同的错误: 'upload.sh:48:upload.sh:96b2edbf09638837d4c2feadb3d3bb3e:不found' – user1524529 2012-07-20 00:51:53
我现在发现我的错误:)。 间距误差! – user1524529 2012-07-20 00:55:35
在shell脚本中进行赋值时要小心。请勿在operator=
的任何一侧使用空格。请尝试以下操作:
fileName="$ON.gpg"
md5sum=$(md5sum ${fileName})
注意变量和分配operator=
是没有空间在一起。
此外,当您使用反引号作为`expression`
时,它将像shell使用$(expression)
那样执行,正如用户ghoti指出的那样。
非常感谢那个链接! – user1524529 2012-07-20 00:56:09
我的荣幸。整个维基是迷人的,极具教育意义。它由FreeNode上的#bash频道经常出现的人维护。如果你去那里,准备受到侮辱*和*受过教育。 :-) – ghoti 2012-07-20 01:00:03