パラメータで引用符を使用することとシェルスクリプトで引用符を使用しないことの違いは何ですか?

パラメータで引用符を使用することとシェルスクリプトで引用符を使用しないことの違いは何ですか?

本を読んでいますLinuxのコマンドラインセクション27では、シェルスクリプトの作成方法を教えています。ファイル表現部分では、次のように言います。

スクリプトは定数FILEに割り当てられたファイルを評価し、評価が実行されたときの結果を表示します。このスクリプトに注目すべき2つの興味深いことがあります。まず、$ FILEパラメーターが式でどのように参照されるかを見てください。これは必須ではありませんが、パラメータが空になるのを防ぎます。 $ FILEのパラメータ拡張によってNULL値が発生すると、エラーが発生します(演算子は演算子の代わりに空ではない文字列として解釈されます)。

「演算子は演算子の代わりに空でない文字列として解釈されます」という内容を理解していません。誰かが私に例を与えることができますか?ありがとうございます。

元のコードは次のとおりです。

#!/bin/bash
# test-file: Evaluate the status of a file
FILE=~/.bashrc
if [ -e "$FILE" ]; then
    if [ -f "$FILE" ]; then
        echo "$FILE is a regular file."
    fi
    if [ -d "$FILE" ]; then
        echo "$FILE is a directory."
    fi
    if [ -r "$FILE" ]; then
        echo "$FILE is readable."
    fi
    if [ -w "$FILE" ]; then
        echo "$FILE is writable."
    fi
    if [ -x "$FILE" ]; then
        echo "$FILE is executable/searchable."
    fi
else
    echo "$FILE does not exist"
    exit 1
fi
exit

ベストアンサー1

値が$FILE空の文字列であり、引用符でなければ、$FILEコンテンツはにif [ -e $FILE ]; thenなりますif [ -e ]; then。このコマンドの規則は、[との間に値が1つしかない場合、値が空の文字列でない場合はtrueになり、空の文字列の場合はfalseになります(それによって取得されます)。[]if [ "" ]; thenelse

参考にif [ -e "$FILE" ]; thenなり、if [ -e "" ]; thenその間[には2つの値があるため、]他のルールが適用されます。

おすすめ記事