タグ付けされた質問 「test」

これは、Unixユーティリティ「test」、または「[」、またはそのシェル構文[[…]]バリアントとして呼び出されるものについてです。ソフトウェアとセットアップのテストに関する質問については、「testing」タグを使用してください。

5
[[]]テストで二重引用符を使用する理由
bashスクリプトに2つの整数があるとします。 value1=5 value2=3 次に、テストの場合に二重引用符を使用する必要があるのはなぜですか?例えば: if [[ "$value1" -eq "$value2" ]] なぜ次のものを使用しないのですか? if [[ $value1 -eq $value2 ]] 私にとって、二重引用符は意味をなさない。
23 bash  shell  quoting  variable  test 


3
等しくないという構文は重要ですか?
スクリプトを作成するとき、次に来ることは真実ではないことを理解しやすいため、通常は次の構文でifを記述します。 if [ ! "$1" = "$2" ]; then 他の人は、以下の方法が良いと言います if [ "$1" != "$2" ]; then 問題は、理由と違いがあるかどうかを尋ねたとき、誰も答えていないようです。 では、2つの構文に違いはありますか?それらの1つは他より安全ですか?それとも単に好み/習慣の問題ですか?
22 shell  test 

3
Bashの2つの文字列を比較する
ifbashスクリプトに次のブロックがあります。 if [ ${PACKAGENAME} -eq kakadu-v6_4-00902C ]; then echo "successfully entered if block!!" fi に等しいifにもかかわらず、スクリプトの実行がブロックに入りません。私は何を間違えていますか?$PACKAGENAMEkakadu-v6_4-00902C

3
変数を文字列またはintとして比較するときに大きな違いはありますか
好奇心から、bash変数の比較(値はinteger)を行う場合、an intまたはaとして宣言された定義済みの値に対してテストできstringます。 サンプルスクリプト: #!/bin/bash f1() { [ "$1" == "1" ] && echo "$FUNCNAME: \"1\" compared as string" } f2() { [[ "$1" -eq 1 ]] && echo "$FUNCNAME: \"1\" compared as int" } f1 $1 f2 $1 出力: $ ./param.sh 1 f1: "1" compared as string f2: "1" compared …
22 bash  shell  test 


2
bashの予期しない文字に一致するブラケット式(範囲なし)
Linuxでbashを使用しています。次のifステートメントから成功していますが、これは失敗コードを返すべきではありませんか? if [[ ■ = [⅕⅖⅗] ]] ; then echo yes ; fi 正方形はどの文字とも等しくないため、成功コードを取得する理由がわかりません。 私の場合、二重括弧を保持することが重要です。 このシナリオで範囲を実行する他の方法、または他に何か提案はありますか?
20 bash  locale  test 


3
整数の比較:算術式または条件式
Bashでは、条件式を使用して2つの整数を比較できます arg1 OP arg2 OPはの一つである-eq、-ne、-lt、-le、-gt、または-ge。これらの算術二項演算子は、arg1がそれぞれarg2と等しい、等しくない、より小さい、以下、より大きい、またはより大きい場合にtrueを返します。Arg1およびarg2は、正または負の整数です。 または算術式: <= >= < > 比較 == != 平等と不平等 2つの整数を比較する方法が2つあるのはなぜですか?どちらを使用するか? たとえば、[[ 3 -lt 2 ]]条件式と(( 3 < 2 ))算術式を使用します。比較がtrueの場合、両方とも0を返します 2つの整数を比較する場合、これらの2つの方法は常に同じ意味で使用できますか?はいの場合、なぜBashには1つではなく2つのメソッドがあるのですか?

3
if条件の括弧:空白なしで構文エラーが発生するのはなぜですか?
次のスクリプトを使用して、1年の2日間の開始時にスクリプトを実行するときに2日前に移動し、また毎月1日と2日目をチェックして2日前に移動します。 if [$month="01"] && [$day="01"]; then date="$last_month/$yes_day/$last_year" fulldate="$last_month/$yes_day/$last_year" else if [$month="01"] && [$day="02"]; then date="$last_month/$yes_day/$last_year" fulldate="$last_month/$yes_day/$last_year" else if [ $day = "01" ]; then date="$last_month/$yes_day/$year" fulldate="$year$last_month$yes_day" else if [ $day = "02" ]; then date="$last_month/$yes_day/$year" fulldate="$year$last_month$yes_day" else date="$month/$yes_day/$year" fulldate="$year$month$yes_day" fi fi fi fi しかし、私の悪いは、以下のエラーメッセージを取得しています Etime_script.sh: line 19: [06=01]: command not …

3
バージョン4.2より前のBashでnounsetシェルオプションを使用して変数が定義されているかどうかをテストするにはどうすればよいですか?
「GNU bash、バージョン4.2」より前のBashバージョンの-v場合、testコマンドのオプションに同等の代替手段はありますか?例えば: shopt -os nounset test -v foobar && echo foo || echo bar # Output: bar foobar= test -v foobar && echo foo || echo bar # Output: foo
16 bash  test 

3
bash:壊した[[<]]
私はbashスクリプトを書いていて、突然この動作が始まりました: [[ 1 &lt; 2 ]]; echo $? # outputs 0 [[ 2 &lt; 13 ]]; echo $? # outputs 1 しかし-lt健全に動作します: [[ 1 -lt 2 ]]; echo $? # outputs 0 [[ 2 -lt 13 ]]; echo $? # outputs 0 &lt;何とか誤って上書きしましたか? この動作をテストするために作成したスクリプトは次のとおりです。 #!/bin/bash for a in {1..5} do …
14 bash  test 

5
シェルスクリプトでプログラムのバージョンを比較する方法は?
gccバージョンを比較して、システムに最小バージョンがインストールされているかどうかを確認するとします。 gccバージョンを確認するために、以下を実行しました gcc --version | head -n1 | cut -d" " -f4 出力は 4.8.5 だから、私はifこのバージョンを他の値と照合する簡単なステートメントを書きました if [ "$(gcc --version | head -n1 | cut -d" " -f4)" -lt 5.0.0 ]; then echo "Less than 5.0.0" else echo "Greater than 5.0.0" fi しかし、それはエラーを投げます: [: integer expression expected: 4.8.5 比較に文字列を使用していて、-ltrequiresに整数が必要であるという私の間違いを理解しました。では、バージョンを比較する他の方法はありますか?


2
`test`と` [`-異なるバイナリ、違いはありますか?
私は別の質問に答えているときに気付いたのですがtest、それ[は異なるバイナリですが、[マンページにはがありtestます。終了の要件に加えて、]違いはありますか?そうでない場合、なぜシンボリックリンクではなくバイナリを分離するのですか?(これらもbashビルトインでありbash、違いもありません。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.