フォルダ名に空白があっても動作するシェルスクリプトを書きたい


shell scriptで任意のフォルダの中の.bashファイルの有無を確認して  
任意の存在すればshellscriptのあるフォルダに保存するプログラムを書いています。

その際にフォルダ名に空白があると失敗してしまいます。  
shellscriptののある絶対パスに空白がないフォルダであれば成功しました。

空白に\が付いてしまうのが原因で,pwdで出力した空白に\をつける方法はありますでしょうか？  
また下記のコードで注意する点や改善点などありますでしょうか？

[code]

    #!/bin/bash
    current=$(cd $(dirname $0) && pwd)
    filearray=(".bashrc" ".bash_profile" ".bash_history" "index.html")
    
    for item in ${filearray[@]}; do
      if [ -e $HOME/$item ]; then
        echo "$item found"
        filepath=$HOME/$item
        copy=cp $filepath $current
      else
        echo "$item Not found"
      fi
    done
    
[/code]




初めに、配列の定義部分で".bashrc"と".bash_profile"の間だけ`,`が含まれており、このままだとひと続きの要素として認識されていると思うので正しくは

[code]

    filearray=(".bashrc" ".bash_profile" ".bash_history" "index.html")
    
[/code]

* * *

質問に対する回答ですが、if文の中でコピーを行う箇所で、`$current`をダブルクォーテーションで括るのはどうでしょう。

[code]

      if [ -e $HOME/$item ]; then
        echo "$item found"
        filepath=$HOME/$item
        cp $filepath "$current"
      else
    
[/code]




古い話題だが、雑なスクリプトすぎてモヤモヤするので、ちゃんと書いておく。

[code]

    #!/bin/bash
    
    set -u
    
    dst=$(cd $(dirname "$0") && pwd) || exit $?
    items=(".bashrc" ".bash_profile" ".bash_history" "index.html")
    
    for item in "${items[@]}"; do
      src="$HOME/$item"
      if [ -e "$src" ]; then
        echo "$item found"
        cp -- "$src" "$dst/"
      else
        echo "$item Not found"
      fi
    done
    
[/code]

