我的目录名称之一中有空格。我想从 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"