私のシェルスクリプトには、実行時に正しくチェックされない変数があります。
入力する
#!/bin/sh
SERVER_ERL_ARGS="+K true +A30 +P 1048576 \
-kernel inet_default_connect_options [{nodelay,true}]"
echo ${SERVER_ERL_ARGS}
出力:
+K true +A30 +P 1048576 -kernel inet_default_connect_options a
この動作の理由とそれを解決するにはどうすればよいですか?
答え1
変数拡張を参照しておらず、echo
現在のディレクトリに名前が付けられたファイルがあります。a
ファイル名はワイルドカードパターンのように機能し、[{nodelay,true}]
名前に単一の文字を含むすべてのファイルと一致します。あなたの場合、[...]
現在のディレクトリから呼び出されるファイル名と一致します。a
したがって、変数を参照しますが、次のように使用することをお勧めしますprintf
。
printf '%s\n' "$SERVER_ERL_ARGS"
また、拡張が拡張の直後の文字が変数名の有効な文字列の一部でない限り、すべての場合に${variable}
正確に等しいものがあることに注意してください。$variable
"${variable}x"
また見なさい: