
declare
以下は、スクリプトでこれを使用することを示す簡単な例です。しかし、getスクリプトは次のようになります。
$ 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
できません。構文はシェルによって異なる場合があります。したがって、sheebang()を選択する必要があります。スクリプトをbashとして実行する必要がある場合は、最初の行は次のようになります。bash
zsh
#!
#!/bin/bash
または
#!/usr/bin/env bash
答え2
declare
bash と zsh 拡張です。あなたのシステムでは/bin/sh
bashやzsh(おそらくash)ではないため、declare
使用できません。typeset
代わりにはdeclare
同義語ですが、typeset
kshでも動作します。 Ashtypeset -i
や他のほとんどの用途には同等の機能は組み込まれていません。typeset
実際に整数変数を宣言する必要はありません。 fortypeset -i
のようないくつかの構文ショートカットを許可するだけです。hello=2+2
hello=$((2+2))
答え3
declare
定義したシェルにない可能性があります。シェルボーン- #! /bin/sh
。
試して#!/bin/bash
みてください。
ソーシングが機能する理由は、すでにアサーションをサポートするシェルにあるためです。したがって、これを調達しても新しいシェルは開きません。使わなかった知らない人は立場をとります。
答え4
Bashの他の2つのバージョンを試すこともできますdeclare
。つまり、typeset
とlocal
。それらはすべて-i
次のものに関連しています。整数)。私も参照してくださいテストスクリプト。 PS。declare
まだ実装されていません機械的人造人間(MKSH).