1. ホーム
  2. シェル

linuxのbashで引数が多すぎる問題の解決法

2022-02-25 11:13:04
linux bashシェルで引数が多すぎる問題の解決策を紹介します。







から取得した。 http://www.jbxue.com/article/13378.html







ステートメントを使用して、ファイルの内容が空であるかどうかを判断します。



if test -z `cat filename`.



filenameが空であるか、スペースを含まない1つの文字列だけの場合は、すべてがうまくいき、そうでない場合は、引数が多すぎる、あるいは、二項演算子が期待される、などのエラーが報告されます。



参考記事:http://www.ibm.com/developerworks/cn/linux/shell/bash/bash-2/index.html



原因分析。



ファイル名のキャリッジリターンなどのスペースはbashを混乱させる。



環境変数が二重引用符で囲まれていない場合、bashは条件の中に独立変数が多すぎると考えます。



文字列の独立変数を二重引用符で囲むことで、この問題を解消することができます。



文字列の独立変数をすべてダブルクォートで囲む習慣をつけると、似たようなプログラミングのミスがかなりなくなりそうです。



解決方法



コマンド実行部分にダブルクォートを追加するだけです。



if test -z "`cat filename`"







シェルで引数が多すぎる場合の解決策 II.



今日、時折小さな問題を解決するために、奇妙な問題に遭遇 "[ ]" と " [[ ]] " 異なる効果は、次のように要約されます。



コードの表示: if [ -z ` lsof -i:22 ` ] //this write will report too many arguments, change to [[ -z ` lsof -i:22 ` ]] ](この書き込みは引数が多すぎると報告されます。



                            では



                                 echo "ポートが動作していません"



                             さもなければ 



                                 echo "ポートが動作しています"



                             フィ



この簡単なシェルスクリプトを実行すると、いつも引数が多すぎると報告されるのですが、最終的に、バージョンの汎用性との関係があることがわかりました。もっと簡単に言うと、"[[ ]]"は"[ ] "より汎用性に優れているので、この問題を避けるために、"[ ] " を直接 " [[ ]]" quot; に置換すれば問題ないのですが、その場合は、"[[] " に置換してください。また、"[ ]"よりは、"[ ]"の方が耐障害性が強い、つまり、"[ ]& quot; ではエラーを報告するかもしれないが、"[] 構造ではエラーを報告しない、など、 & &,|| などのように。このような論理的判断は、この記事の焦点ではないので、パスです。