kma*_*729 5 bash shell-script quoting variable-substitution
我在其中一个目录名称中有一个空格。我想从 bash 脚本中列出它下的一个文件。这是我的脚本:
fpath="${HOME}/\"New Folder\"/foobar.txt"
echo "fpath=(${fpath})"
#fpath="${HOME}/${fname}"
ls "${fpath}"
Run Code Online (Sandbox Code Playgroud)
此脚本的输出是:
fpath=(/Users/<username>/"New Folder"/foobar.txt)
ls: /Users/<username>/"New Folder"/foobar.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)
但是什么时候在我的 shell 上列出它存在的文件:
$ ls /Users/<username>/"New Folder"/foobar.txt
/Users/<username>/New Folder/foobar.txt
Run Code Online (Sandbox Code Playgroud)
有没有办法ls
从我的脚本中显示路径?
只需删除内部引用的双引号:
fpath="${HOME}/New Folder/foobar.txt"
Run Code Online (Sandbox Code Playgroud)
由于完整的变量内容包含在双引号中,因此您不需要第二次这样做。它从 CLI 工作的原因是 Bash 首先评估引号。它在变量中失败,因为反斜杠转义的引号被视为目录路径的文字部分。
有没有办法让 ls 显示我的脚本中的路径?
是的,使用:
ls $HOME/New\ Folder/foobar.txt
Run Code Online (Sandbox Code Playgroud)
问题是您在变量的值中包含引号。目录的真实名称没有"
引号。
您只需要使用一种引用方法来构建变量。
在变量中:
fpath=${HOME}/New\ Folder/foobar.txt
Run Code Online (Sandbox Code Playgroud)
或者:
fpath="${HOME}/New Folder/foobar.txt"
Run Code Online (Sandbox Code Playgroud)
甚至:
fpath=${HOME}/'New Folder/foobar.txt'
Run Code Online (Sandbox Code Playgroud)
完整脚本:
#!/bin/bash
fpath=${HOME}/New\ Folder/foobar.txt
echo "fpath=(${fpath})"
ls "${fpath}"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5608 次 |
最近记录: |