Bashスクリプトの変数のためのスペース

Bashスクリプトの変数のためのスペース

私のディレクトリ名の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"

関連情報