我对 bash 脚本相当陌生,一直进展顺利,但遇到了问题。
我正在尝试创建一个使用正斜杠 (/) 的脚本,但是我不断收到错误消息/: is a directory.
所以基本上我需要的是将命令传递test/(hello)
给终端中的程序。所以我添加了反斜杠以使其工作:test\/\(hello\)
但是,我收到此错误。这里有什么问题吗?
答案1
仅当您不在参数之前传递命令时才会发生这种情况。您需要像这样调用命令:
command [args ...]
如果你像这样调用它,它就会起作用。
$ echo test/\(hello\)
test/(hello)
根据记录,引用参数通常比转义所有元字符要容易得多(也更具可读性)。您可以使用"
and来完成此操作'
(有关于此的很好的信息这里)。
答案2
如果您需要将确切的字符串传递test/(hello)
给程序,请将其放在单引号之间:
someprogram 'test/(hello)'
除了单引号字符本身之外,每个字符都按字面意思解释在单引号之间。如果字符串中需要单引号字符,请将其传递为'\''
(结束文字字符串,引用下一个字符,按字面解释单引号,开始文字字符串)。
echo 'Lasciate ogne speranza, voi ch'\''entrate'
这与您在此处显示的错误消息无关。/: is a directory
意味着您尝试/
作为程序执行。可能在某个地方您试图写入程序的完整路径,但留下了额外的空格,如
/ path/to/program
该消息中可能还有其他标点字符或控制字符使这一点不太明显。为了方便调试,请将set -x
脚本的第二行放在第一#!
行之后,以便 shell 打印其执行的每一行的跟踪信息。