2017-12-06 11 views
1

私はbashシェルスクリプトを使って練習しようとしていましたが、$ 1変数を使ってスクリプトの最初の引数を参照する際に問題がありました。これは引数としてファイルを受け取り、ファイルの名前を出力する単純なスクリプトです。ここに私のスクリプトは次のとおりです。それは、空行を返すいくつかの理由getoptsを使用して関数に渡すときにコマンドライン引数が機能しない

./practice.sh -h somefile.txt 

#!/bin/bash 

function practice() { 
    echo "${1}" 
} 

while getopts "h:" opt; do 
    case "$opt" in 
    h) practice 
    ;; 
    esac 
done 

exit 0 

は、私は、次のコマンドを試してみました。何かご意見は?

答えて

6

$1は、関数に渡される最初の位置パラメータで、ではなく、がスクリプトに渡されます。

したがって、関数に必要な引数を再度渡す必要があります。また、あなたが-hを処理したいが、その後あなたの代わりにあなたのcase-aをチェックされているgetopts言う:

#!/bin/bash 

practice() { 
    echo "${1}" 
} 

while getopts "h:" opt; do 
    case "$opt" in 
    h) practice "${OPTARG}" 
     ;; 
    esac 
done 
+0

ありがとう、私は今何が間違っていたのか理解しています。また、hの代わりにaというオプションは、私の間違いだった。彼らはすべてhであるはずだった。 – shinryu333

0
#!/bin/bash 

function practice() { 
    echo "${1}" 
} 

while getopts "h:" opt; do 
    case "$opt" in 
    a) practice $* 
    ;; 
    esac 
done 

exit 0 

は、上記のような関数にコマンドライン引数を渡します。

+1

OPが具体的に引用符を破棄しない限り、正しい構文は '" $ @ "'です。 – tripleee

+0

@ tripleee、はい。あなたが正しいです –

関連する問題