web-dev-qa-db-ja.com

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を取得する方法はありますか?

5
kmad1729

内側の引用符で囲まれた二重引用符を削除するだけです。

fpath="${HOME}/New Folder/foobar.txt"

完全な変数の内容は二重引用符で囲まれているので、もう一度行う必要はありません。 CLIから機能する理由は、Bashが最初に引用符を評価するためです。バックスラッシュでエスケープされた引用符はディレクトリパスのリテラル部分として扱われるため、変数では失敗します。

7

スクリプトからパスを表示するlsを取得する方法はありますか?

はい、使用します:

ls $HOME/New\ Folder/foobar.txt

問題は、変数の値の中に引用符が含まれていたことでした。ディレクトリの実際の名前には"引用符。

one引用メソッドのみで変数を構築する必要があります。

変数内:

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}"
5
Isaac

引用符はフォルダ名の一部ではありませんか?

これはうまくいくはずです:

fpath="$HOME/New Folder/foobar.txt"
ls "$fpath"
3
Kusalananda