为什么我的 shell 脚本给出错误:“声明:未找到”?

为什么我的 shell 脚本给出错误:“声明:未找到”?

这是一个简单的示例,显示declare在脚本中使用该脚本将不会运行,而获取脚本将运行:

$ cat /tmp/new
#! /bin/sh
declare -i  hello
$ chmod a+rwx /tmp/new
$ /tmp/new
/tmp/new: 3: declare: not found
$ source /tmp/new
$ 

我想知道为什么直接运行脚本不起作用,而采购它却可以?我怎样才能使第一个工作?谢谢!

答案1

declare是一个内置函数,它不能与 一起使用/bin/sh,只能与bashor zsh(也许还有其他 shell)一起使用。不同 shell 的语法可能有所不同。您必须相应地选择 sheebang ( #!):如果脚本需要由 bash 运行,则第一行必须是

#!/bin/bash

或者

#!/usr/bin/env bash

答案2

declare是 bash 和 zsh 扩展。在您的系统上,/bin/sh既不是 bash 也不是 zsh(可能是 ash),因此declare不可用。您可以使用;typeset代替declare它们是同义词,但typeset也适用于 ksh。在 ash 中,没有内置的等效项typeset -i或大多数其他用途。typeset您实际上不需要typeset -i声明整型变量;它所做的只是允许一些语法快捷方式,例如hello=2+2for hello=$((2+2))

答案3

declare您定义的 shell 中可能不存在舍邦- #! /bin/sh.

尝试#!/bin/bash一下。

采购它起作用的原因是您已经处于支持声明的 shell 中。因此,采购它并没有打开一个新的外壳没有使用不知道的人表态。

答案4

您还可以尝试 Bash 的其他 2 个等效版本declare,它们是:typesetlocal。他们都与-i(对于整数)。另请参阅我的测试脚本。附言。declare尚未实施安卓(MKSH)。

相关内容