簡単なスクリプトを書いた。
read -p "Enter the path: " path
echo "$path"
入力を次のように指定します。
$HOME
出力は次のとおりです
$HOME
書くなら
echo "$HOME"
出力
/home/sam
では、前者の場合はどうでしょうか?
答え1
path
~になるひも $PATH
、「説明」より。この解釈は特定の状況でのみ発生します。たとえば、インタラクティブシェルコマンドプロンプトに「bare」と入力しても確かにそうでない場合(そうでなければ、埋め込みテキストファイルを読み取ることはread
できません!)read
$
覚えている、拡張どこでもアクティブにしたくない機能です。これにより、変数を内容ではなく変数に渡すプログラムの作成が困難になります。したがって、プログラミング言語の設計者(またはシェルの場合は数十年間の有機開発)が拡張する部分と拡張しない部分を決定します。ここには実際の「理由」はありません。定義された方法にすぎません。
あなたが望むなら、eval value="$path"
それを得ることができます。デフォルトでは、入力をシェルプロンプトにし、ユーザーが$(rm -rf /)
入力するとすべてを削除できるため、この方法はお勧めできません。たとえば...
全体的に、これはソフトウェア設計の質問に近いと思います。ユーザーはどのようなことをしたいですか?
この場合、$HOME
おそらく許可したい唯一の「特別な」状況です。~
標準形式の短い形式なので、に置き換えて次のことをお勧めします。
read "Enter foo bar baz:" raw_path
if [[ ( ! -d "${raw_path}" ) && "${raw_path:0:1}" = "~" ]]; then
_path="${HOME}${raw_path:1:}"
else
_path="${raw_path}"
fi