19

このような特定のパラメーターに対してJSDocを生成するbashスクリプトを取得しようとしています

./jsdoc.sh file.js another.js maybe-a-third.js

次のシェル コマンドに不明な数のパラメータを渡す方法に行き詰まっています。

(また、 param が存在するかどうかを確認する方法がわからない、ない場合のみ exitst if [ -z ... ]

このコードは最大 2 つのパラメーターに対して機能しますが、明らかに正しい方法ではありません...

#!/bin/bash

# would like to know how to do positive check
if [ -z "$1" ]
then echo no param
else
        d=$PWD
        cd ~/projects/jsdoc-toolkit/

        # this bit is obviously not the right approach
        if [ -z "$2" ]
        then java -jar jsrun.jar app/run.js -a -t=templates/jsdoc/ $d/$1
        else java -jar jsrun.jar app/run.js -a -t=templates/jsdoc/ $d/$1 $d/$2
        fi

        cp -R out/jsdoc $d
fi

これを達成する方法についての他の指針をいただければ幸いです。

編集:@skjaidevの回答に従ってスクリプトを更新しました-幸せな日々;)

#!/bin/bash

d=$PWD

for i in $*; do
    params=" $params $d/$i"
done

if [ -n "$1" ]; then
        cd ~/projects/jsdoc-toolkit/
        java -jar jsrun.jar app/run.js -a -t=templates/jsdoc/ $params
        cp -R out/jsdoc $d
fi
4

4 に答える 4

17

空白を含む引数を処理するには、 を使用"$@"して反復し、後で使用するために配列に格納します。

#!/bin/bash
if (( $# == 0 )); then
  echo "usage: $0 file ..."
  exit
fi
dir=$(pwd)
declare -a params
for file in "$@"; do params+=( "$dir/$file" ); done
cd ~/projects/jsdoc-toolkit/
java -jar jsrun.jar app/run.js -a -t=templates/jsdoc/ "${params[@]}"
cp -R out/jsdoc "$dir"
于 2011-08-05T22:15:59.197 に答える
17

$* にはすべてのパラメーターがあります。それらを反復することができます

for i in $*;
do
    params=" $params $d/$i"
done
your_cmd $params
于 2011-08-05T21:40:54.547 に答える
4

-nの逆であり-z"$@"すべてのパラメーターをサブコマンドに渡す正規の方法です。これ以上のものは、経由で見つけることができますman bash

于 2011-08-05T21:41:40.483 に答える