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

投稿者: Anonymous

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

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

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

#!/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

解決

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

filearray=(".bashrc" ".bash_profile" ".bash_history" "index.html")

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

  if [ -e $HOME/$item ]; then
    echo "$item found"
    filepath=$HOME/$item
    cp $filepath "$current"
  else
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *