[解決済み] シェルスクリプトの比較で x$VAR = xyes がよく使われるのはなぜですか?
2023-07-04 06:59:16
質問
autotools (autoconf, automake) を使用するプロジェクトのビルドスクリプトで、このようなことをよく目にします。 誰かがシェル変数の値をチェックしたいとき、彼らは頻繁にこのイディオムを使用します。
if test "x$SHELL_VAR" = "xyes"; then
...
このように単純に値をチェックするのと比べて、どのような利点があるのでしょうか。
if test $SHELL_VAR = "yes"; then
...
これをよく見るのは何か理由があるに違いないと思うのですが、それが分かりません。
どのように解決するのですか?
を行うシェルを使っている場合
シンプル
置換と
SHELL_VAR
変数が存在しない (または空白) 場合は、エッジケースに注意する必要があります。以下のような翻訳が起こります。
if test $SHELL_VAR = yes; then --> if test = yes; then
if test x$SHELL_VAR = xyes; then --> if test x = xyes; then
これらのうち最初のものはエラーが発生します。
test
の最初の引数がなくなっているため、エラーが発生します。2番目はそのような問題はありません。
あなたのケースは次のように翻訳されます。
if test "x$SHELL_VAR" = "xyes"; then --> if test "x" = "xyes"; then
は
x
は、少なくとも POSIX 準拠のシェルでは、引用符によって空の引数とスペースを含む引数の両方が単一のオブジェクトとして解釈されるため、実際には冗長です。
関連
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
-
[解決済み] Bashシェルスクリプトの入力引数の存在確認
-
[解決済み] シェルスクリプトでYYYY-MM-DD形式の日付にする
-
[解決済み] シェルスクリプトでブール変数を宣言して使用するにはどうすればよいですか?
-
[解決済み] シェルスクリプトで部分文字列を別の文字列に置き換える
-
[解決済み] コマンドラインからdiffをカラー化する方法
-
[解決済み] Unixのfindで先頭の"./"を削除するには?
-
[解決済み] 異なる行のファイル名のリストを取得する方法
-
[解決済み] gnu sort の --general-numeric-sort と --numeric-sort オプションの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Unixでテキストファイルからあらかじめ決められた範囲の行を抽出するには?
-
[解決済み] Bash における三項演算子 (?:)
-
[解決済み】Dockerfileのif else条件で外部引数を指定した場合
-
[解決済み] JPEGを再圧縮せずにEXIFデータを削除する方法を教えてください。
-
[解決済み] ターミナルからのシングルラインsftp
-
[解決済み] ディレクトリパス変数の末尾はスラッシュであるべきですか?
-
[解決済み] unixでタイムスタンプを基準にファイルをソートするには?[クローズド]
-
[解決済み] cat の出力を cURL にパイプし、ファイルのリストをダウンロードする
-
[解決済み] Unixスクリプトを15秒ごとに実行させるには?
-
[解決済み] あるディレクトリとサブディレクトリにあるすべてのファイルを逆順にリストアップするにはどうすればよいですか?