.profileファイルで生成された関数にパラメータを使用したいと思います。
パラメータが指定されていない場合は入力を要求し、そうでない場合は変数を$ 1に設定したいと思います。
$ 1が空であることを確認すると、次のエラーが発生します。
sh[7]: 1: Parameter not set.
次の行から:
if [ ! -n "$1" ]; then
bashの代わりにshを使用しています。
編集:良いです。 ifステートメントの終わりまでの最初のコード行は次のとおりです。
HOST=`hostname`
cd /opt/dirpath
ll *.sto
if [ x"$1" = x ]; then
# Ask for input
echo "File: \c"; read outFile
else
outFile=$1
fi
パラメータを有効または無効にするために他の人のコードを編集しています。
答え1
私はこれに多くがあると思います:
これは、使用中のコマンドではないか、関数の他の場所で別の方法で実行しています。エラーはで発生します${1?}
。または、テストで発生したが最初にそうした場合にのみ発生しますset -u
。
この問題を解決するには、この操作を停止してください。このset +u; fn_name
ようにして何が起こるのかを見てください。拡張機能がある場合、${1?}
関数にパラメータを提供するまでこのエラーは消えません。
以下は、エラーを再現する方法のいくつかのコード例です。
sh -c 'fn(){ [ ! -n "${1?}" ]; }; fn'
sh: 1: 1: parameter not set
...または...
sh -uc 'fn(){ [ ! -n "$1" ]; }; fn'
sh: 1: 1: parameter not set
...しかし...
sh -uc 'fn(){ [ ! -n "$1" ]; }
set +u; fn; echo "$?"'
0
...そして...
sh -c 'fn(){ [ ! -n "${1?}" ]; }
fn some args; echo "$?"'
1
機能が設定されている場合は、その機能を編集する必要が-u
あります。そうでなければ、そうしても.profile
同じです。ほとんどの場合はset -u
そうです。いいえ継続的なシェル設定に最適です。これはモードが次のようになるためです。デザイン済み殻を殺す生成されるエラーの種類を処理する簡単な方法はありません。これは正確に[
testでやりたいことです]
。