我正在使用脚本来复制一些文件,具体取决于它们创建的年份,它对于不带空格的文件工作正常,但对于带空格的文件,stats 命令存在问题,例如我有这个文件:file with spaces.pdf
stat -c %y ./path/to/file\ with\ spaces.pdf|cut -d '-' -f 1
返回年份,例如:2017
但是当在脚本中使用时:
year=$(stat -c %y $pathfile | cut -d '-' -f 1)
这似乎不起作用,如果我采取以下输出:
echo "stat -c %y file | cut -d '-' -f 1"
并在终端中复制它确实有效,在所有情况下错误都是相同的,就像忽略文件名的这一部分with\ spaces.pdf
::
stat: cannot stat './path/to/file\': No such file or directory
我尝试在路径中添加引号,但它似乎不起作用:
year=$(stat -c %y "$pathfile" | cut -d '-' -f 1)
我在某个地方看到我需要将统计数据放入函数中,我这样做了:
makestats () {
$(stat -c %y $1|cut -d '-' -f 1)
}
但它似乎不起作用,我遇到了同样的错误,如果你能给我你的帮助那就太好了。
答案1
引用您的变量bash
,不这样做会将变量中的单词拆分为单个标记,并且使用该变量的命令将在预期单个字符串时获取多个单词(请参阅分词在外壳中)
year=$(stat -c %y "$pathfile" | cut -d '-' -f1)
我想你的问题在于你正在使用的变量"
以及\
转义序列。您需要执行其中任一操作。
pathfile="/path/to/file with spaces"