2017-10-26 9 views
0

getoptsを使用するオプションのbashスクリプトで作業しています。このスクリプトには、複数のオプションと、1つのオプションのみが受け入れられる特定のケースを受け入れることができるケースがあります。いくつかのケースをテストしながら、私はこの問題に遭遇しましたが、私はこの質問のために擬似コードに減らしました。リターンの下に実行

for arg in "[email protected]"; do 
    echo ${arg} 
done 
echo "end" 

$ ./test.sh -a -b 
-a 

end 

-bが空行に返されていない理由を私は、bashの4.1.2を実行しているのですか?私はこれが ' - 'と関係があると仮定します。

答えて

5

私はあなたの正確なエラーを再現することはできませんが、これはechoを使用することのリスクである:$arg有効なオプションであれば、それは印刷するなど、いない文字列として扱われます。代わりにprintfを使用してください:

printf '%s\n' "$arg" 
+2

しかし '-b'や' -a'のどれも 'echo'の正しいフラグはありません。答えは良いですが、不思議なOPの出力が間違っています – Inian

+0

修正;なぜ '-b'が' echo'によってオプションとして扱われるように見えるのか分かりません。 – chepner

+0

いずれにしても、これは '-n'でも問題になりました。解決策は同じです –

関連する問題