Bash 스크립트의 변수를 위한 공백

Bash 스크립트의 변수를 위한 공백

내 디렉터리 이름 중 하나에 공백이 있습니다. 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"

전체 변수 내용은 큰따옴표로 묶여 있으므로 두 번째로 실행할 필요가 없습니다. 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"

관련 정보