首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用终端中的bash脚本从csv返回带有字符串的Echo变量

使用终端中的bash脚本从csv返回带有字符串的Echo变量
EN

Stack Overflow用户
提问于 2019-12-24 19:44:04
回答 1查看 181关注 0票数 0

我相信有一些类似的帖子,如果我在这方面做得更好,我可以找到我自己问题的答案(This onethis one)。

我有一个Mac,并且正在使用来自终端的setfile命令,它在单个文件上工作得很好。

setfile -d "08/02/2001 00:00:00" X-09-04.m4v

然而,我有数百个视频来做这件事。我有一个文件changedate.csv文件,在两个单独的列中包含所有日期和相关的文件名(屏幕截图)。csv的格式如下:

代码语言:javascript
复制
datenew,id
12/19/1998 12:00:00 AM,X-01/X-01-01.m4v
12/31/1998 12:00:00 AM,X-01/X-01-02.m4v
12/31/1998 12:00:00 AM,X-01/X-01-03.m4v

然后,我创建了changedate.sh脚本,如下所示:

代码语言:javascript
复制
#!/bin/bash
cat changedate.csv | while IFS=, read datenew id;
do
    echo 'setfile -d "$datenew" $id'
done

命令集文件需要用引号包装日期字符串。这就是困扰我的原因,因为当我从终端运行sh changedate.sh脚本时,它会像这样打印出来:

代码语言:javascript
复制
setfile -d "$datenew" $id
setfile -d "$datenew" $id
setfile -d "$datenew" $id
....

如果删除变量周围的引号,它将正确读取csv,输出如下所示:

代码语言:javascript
复制
setfile -d 12/19/1998 00:00:00  X-01/X-01-01.m4v
setfile -d 12/31/1998 00:00:00  X-01/X-01-02.m4v
setfile -d 12/31/1998 00:00:00  X-01/X-01-03.m4v
...

这几乎是正确的,但它不起作用,因为日期字符串没有用所需的引号包装。最后的输出应该如下所示:

代码语言:javascript
复制
setfile -d "12/19/1998 00:00:00"  X-01/X-01-01.m4v
setfile -d "12/31/1998 00:00:00"  X-01/X-01-02.m4v
setfile -d "12/31/1998 00:00:00"  X-01/X-01-03.m4v
...

我想我需要用反斜杠来让变量与引号一起打印,但我不太清楚。谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2019-12-24 20:29:26

变量只在双引号中展开,而不是单引号。因此,您需要在echo的参数周围加上双引号。

代码语言:javascript
复制
echo "setfile -d '$datenew' '$id'"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59472904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档