よく使うパスを環境変数として保存し、この変数を呼び出してパス名を設定したいと思います。
$ mypath="~/local/bin/"
$ newFile="${mypath}newFile.sh"
$ echo $newFile
~/local/bin/newFile.sh
これはうまくいくようです。
ただし、タッチへの入力として$ newFileを呼び出すと失敗します。
$ touch $newFile
touch: ~/local/bin/newFile.sh: No such file or directory
$ touch "${mypath}newFile.sh"
touch: ~/local/bin/newFile.sh: No such file or directory
どちらも機能しません。私は何を見逃していますか?
PS 私はこれが議論されたと確信していますが、私は初めてbashに触れたので、用語が何を検索するべきかはまだわかりません。助けてくれてありがとう。
答え1
拡張順序のため、期待どおりに機能しません。
Bashのマニュアルから:
拡張順序は、中かっこ拡張、パラメータと変数拡張、算術拡張、コマンドの置換(左から右へ)です。
最初の行で~
引用符なしで使用すると拡張されます。実際、~
チルダ拡張は変数拡張の前に実行されるため、引用符は内部的に拡張されず、後で拡張されません。
私は動作しているようだと書いていますが、実際にecho
出力結果は~/local/bin/newFile.sh
機能しないことがわかりました。
値にスペースが含まれているため、引用が必要な場合は後半を引用できます~/
。
mypath=~/"local/bin with spaces/"
newFile="${mypath}newFile.sh"
echo "$newFile"
答え2
もちろん私はすぐに答えを見つけました。
$ newFile="${mypath}newFile.sh"
touch newFile
動作しません
$ newFile=${mypath}newFile.sh
touch newFile
実際に働く