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

但是当我的 shell 上列出该文件时,它就存在:

$ 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"

相关内容