字符串cmd在bash命令行中用双引号括起来

时间:2015-12-07 08:55:41

标签: linux bash shell

我是bash的初学者。我遇到这样的问题:

   $ "make -p"  

当我在bash命令行中输入上述内容时,没有任何事情发生,没有错误,没有结果msg。

我在很多网站上搜索了bash的双引号语法。所有这些材料的解释如下:
https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html
举例如:

echo "argument"  

我找不到类似"echo argument"的内容。而且,我发现bash命令行和bash脚本之间存在一些奇怪的区别。

如果我在命令行中键入不存在的命令:

$ "holy shit"
$ "look that"

没有任何事情发生。但是如果我用bash脚本输入它:

#!/bin/bash  
"holy shit"  
"look that"  

并执行此脚本,将丢弃错误消息:

$ ./myshell   
./myshell: line 2: holy shit: command not found  
./myshell: line 3: look that: command not found

有人可以在他们附上整个命令时帮助详细解释双引号的效果吗? 为什么命令行中没有输出? 为什么命令行和脚本之间有所不同?

2 个答案:

答案 0 :(得分:0)

双引号表示它是一个字符串。你可以这样做:

echo "Hello everybody"

在命令行或shell中。有时人们把东西放在引号中。你应该用你自己的变量替换引号中的内容(删除引号),有时人们会在你应该键入的整个命令周围加上引号来显示你应该键入的内容。对于你的“make -p”的例子,只需在没有引号的情况下输入它,它应该在命令行和脚本中都有效。

答案 1 :(得分:0)

如果输入命令foo,shell将搜索PATH变量中列出的目录,直到找到此名称的命令。如果没有,则会收到错误消息 command not found

如果输入一个包含至少一个斜杠的命令 - 例如./foofoo/bar - ,则shell 搜索PATH,但假设您已经输入了正确的命令路径。如果它不存在,则会收到错误消息 No such file or directory

在你的情况下,

 "cd home"

cd home的某处搜索名称为 PATH 的文件,但没有此名称的文件,并且您找不到命令。如果输入

"cd /home"

shell绕过PATH-search,并假设当前目录中存在名为 cd 的目录(即3个字母c,d,space),并在其下方名为home的文件,带有x位设置。您的系统上没有这样的文件(也没有这样的目录),并且您收到错误消息没有这样的文件或目录

如果您有尝试的习惯,可以尝试以下方法:

mydir="cd "
mkdir "$mydir"
echo "echo Hello Stranger" >"$mydir/home"
chmod +x "$mydir/home"
"cd /home"

这应该打印 Hello Stranger 。请注意,在 mydir 的分配中, cd 与结束引号之间必须有一个空格。