私のディレクトリ名の1つにスペースがあります。 bashスクリプトの下にファイルをリストしたいと思います。これは私のスクリプトです。
fpath="${HOME}/\"New Folder\"/foobar.txt"
echo "fpath=(${fpath})"
#fpath="${HOME}/${fname}"
ls "${fpath}"
このスクリプトの出力は次のとおりです。
fpath=(/Users/<username>/"New Folder"/foobar.txt)
ls: /Users/<username>/"New Folder"/foobar.txt: No such file or directory
ただし、シェルにファイルを一覧表示すると、次のように表示されます。
$ ls /Users/<username>/"New Folder"/foobar.txt
/Users/<username>/New Folder/foobar.txt
ls
スクリプトにパスを表示する方法はありますか?
答え1
引用符内の二重引用符を削除します。
fpath="${HOME}/New Folder/foobar.txt"
変数全体の内容は二重引用符で囲まれているため、2番目に実行する必要はありません。 CLIで動作する理由は、Bashが引用符を最初に評価するためです。バックスラッシュでエスケープされた引用符は、ディレクトリパスのリテラル部分として処理されるため、変数で失敗します。
答え2
lsにスクリプトにパスを表示させる方法はありますか?
はい、次を使用してください。
ls $HOME/New\ Folder/foobar.txt
問題は、変数の値に引用符が含まれていることです。"
引用符なしでディレクトリの実際の名前です。
変数を設定するだけです。一つ引用方法。
変数から:
fpath=${HOME}/New\ Folder/foobar.txt
または:
fpath="${HOME}/New Folder/foobar.txt"
でも:
fpath=${HOME}/'New Folder/foobar.txt'
フルスクリプト:
#!/bin/bash
fpath=${HOME}/New\ Folder/foobar.txt
echo "fpath=(${fpath})"
ls "${fpath}"
答え3
引用符はフォルダ名の一部ではありませんか?
これは働きます:
fpath="$HOME/New Folder/foobar.txt"
ls "$fpath"