cat > variables.sh << EOF1
#!/bin/bash
echo "Please enter your first name:"
read -e -i "Bob" FIRST_NAME
echo "Please enter your last name:"
read -e -i "Marley" LAST_NAME
echo "First name: $FIRST_NAME"
echo "Last name: $LAST_NAME"
if [[ "$FIRST_NAME" == "Bob" ]] ; then
echo "Last name: $LAST_NAME"
fi
EOF1
source ./variables.sh
に上記の結果を実行:何らかの理由でなぜif文の中でBash変数を空にしますが、if文の外側ではないのはなぜですか?
First name: Bob
Last name: Marley
Last name:
、if文の内部LAST_NAME変数が空です。しかし、スクリプトが実行された後、私は
echo "Last name: $LAST_NAME"
手動で呼び出した場合、私は、次を参照してください。
Last name: Marley
だから、私は変数が実際に最後の名前が含まれています知っています。
if文のコンテキストがif文の外部のコンテキストと異なるかのように動作しています。それは正確ですか?
私が期待しているようにこの作業を行うにはどうすればよいですか(ifステートメントの中の$ LAST_NAMEには姓が含まれています)。
私はこれをRHEL7でテストしています。このよう
移植性に関心がないなら、 '[]'を使うことによる実質的な利点はありません。 '[[]]'キーワードは高速であり、 '[]'は多くの関数を持っています。 – PesaThe
一方、 'echo -n'は' bash'がコンパイルされたオプションに依存することがあるので、本当に*移植性がありません。代わりに 'printf'を使うか、この場合' read -p 'と入力してください: "..."。 –
私は同意します。私は 'echo -n'オプションがOSフレーバーによっては常に移植可能ではないことを知っていました。しかし、それはしばしば利用可能です - 私は多くの場合にプロンプトをクリーンアップする簡単な方法を示していました。 'read -p'オプションも常に利用可能なわけではありません。 – ByteSlinger