这是一个简单的示例,显示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
,只能与bash
or 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+2
for hello=$((2+2))
。
答案3
declare
您定义的 shell 中可能不存在舍邦- #! /bin/sh
.
尝试#!/bin/bash
一下。
采购它起作用的原因是您已经处于支持声明的 shell 中。因此,采购它并没有打开一个新的外壳没有使用不知道的人表态。
答案4
您还可以尝试 Bash 的其他 2 个等效版本declare
,它们是:typeset
和local
。他们都与-i
(对于整数)。另请参阅我的测试脚本。附言。declare
尚未实施安卓(MKSH)。