Macos ZSH/Shell变量赋值/用法
我将ZSH用于我的终端外壳,虽然我已经编写了几个函数来自动化特定任务,但我从未真正尝试过任何需要我目前所追求的功能的东西 我最近用Jekyll重新编写了一个博客,我想用scp之类的工具自动化博客帖子的制作,并最终将新生成的文件上传到我的服务器 我对ZSH中的变量绑定/用法有点困惑;例如:Macos ZSH/Shell变量赋值/用法,macos,bash,shell,unix,zsh,Macos,Bash,Shell,Unix,Zsh,我将ZSH用于我的终端外壳,虽然我已经编写了几个函数来自动化特定任务,但我从未真正尝试过任何需要我目前所追求的功能的东西 我最近用Jekyll重新编写了一个博客,我想用scp之类的工具自动化博客帖子的制作,并最终将新生成的文件上传到我的服务器 我对ZSH中的变量绑定/用法有点困惑;例如: DATE= date +'20%y-%m-%d' echo $DATE 如我所料,正确输出2011-08-23 但当我尝试时: DATE= date +'20%y-%m-%d' FILE= "~/path/t
DATE= date +'20%y-%m-%d'
echo $DATE
如我所料,正确输出2011-08-23
但当我尝试时:
DATE= date +'20%y-%m-%d'
FILE= "~/path/to/_posts/$DATE-$1.markdown"
echo $FILE
它输出:
2011-08-23
blog.sh: line 4: ~/path/to/_posts/-.markdown: No such file or directory
当使用我想要的博客标题运行时(忽略需要操纵字符串以使其更加url友好,并且路由路径/收件人不存在的事实)
i、 e.博客“博客标题”,输出:
2011-08-23
blog.sh: line 4: ~/path/to/_posts/-blog title.markdown: No such file or directory
为什么$DATE打印在打印$FILE的调用之上,而不是$FILE中包含的字符串?这里有两个问题 首先,你的第一个片段并没有像我认为的那样。尝试删除第二行,
echo
。它仍然打印日期,对吗?因为:
DATE= date +'20%y-%m-%d'
不是变量赋值-它是使用辅助环境变量调用date
(一般语法为VAR\u NAME=VAR\u VALUE COMMAND
)。你是说:
DATE=$(date +'20%y-%m-%d')
您的第二个代码段仍将失败,但情况有所不同。同样,您使用的是invoke with environment语法,而不是赋值。你的意思是:
# note the lack of a space after the equals sign
FILE="~/path/to/_posts/$DATE-$1.markdown"
我认为这应该能奏效
免责声明:虽然我非常了解bash,但我最近才开始使用zsh;这里可能有我不知道的zshims在工作。了解shell所称的“扩展”。有几种类型,按特定顺序执行: 单词扩展的顺序如下:
set-f
有效$ FILE="~/.zshrc"
$ echo $FILE
~/.zshrc
$ FILE=~./zshrc
$ echo $FILE
/home/user42/.zshrc
变量赋值中的=
周围不能有空格
由于您在评论中询问了在何处学习shell编程,因此有几个选项:
- 阅读壳牌的手册页面
man zsh
- 阅读POSIX外壳的规范,尤其是如果您想在不同的操作系统上运行脚本(您将在晴朗的一天发现自己处于这种情况!)
- 阅读有关shell编程的书籍
- 在usenet新闻组comp.unix.shell中,许多shell向导会回答问题
manbash
。您还应该阅读和的优秀建议。date+%Y-%m-%d
比date+20%Y-%m-%d
更干净<代码>日期+%F更干净。(假设您的date
命令支持这些格式;GNU date支持,但其他命令可能不支持。)