这是我当前代码的一部分
#! /bin/bash
#Take no arguments in
#checks to see if home/deleted is in existence
#creates the directory or file if it is missing
**(line 15)** function checkbin(){
if [ ! -c "~/deleted" ]; then
mkdir -p ~/deleted
fi
if [ ! -f "~/.restore.info" ]; then
touch ~/deleted/.restore.info
fi
}
我可以使用./remove [ARGS]
正确调用此代码
但是当我使用sh remove [ARGS]
打电话时
我收到以下错误remove: 15: remove: Syntax error: "(" unexpected
-rwxr-x--x
上的ls -l
unix是否支持sh和./?
的执行答案 0 :(得分:1)
当使用./
/ bin / bash执行时(如shebang中所定义),而sh
可能是另一个解释器或bash的链接,根据它的调用方式可能会有不同的行为sh
。
bash派生自sh,但有一些特定的语法:
例如在sh Function Definition Command
中
fname() compound-command[io-redirect ...]
没有function
关键字。
了解更多详情
答案 1 :(得分:1)
如果您希望脚本在sh
以及bash
中运行,则需要写入POSIX shell标准。
在这种情况下,这意味着不使用Bash function
关键字:
checkbin(){
test -c "~/deleted" || mkdir -p ~/deleted
test -f "~/.restore.info" || touch ~/deleted/.restore.info
}
如果你正在编写便携式外壳,那么使用#!/bin/sh
作为你的朋友是个好主意。
(顺便说一句,我认为您已经意识到"~/deleted"
和~/deleted
并不相同?)