如何创建一个脚本,在ZSH中保存带空格的文件

时间:2014-02-05 21:15:20

标签: bash zsh

我正在尝试在zsh shell中使用以下脚本(我发现代码here):

# some todo.sh file
IFS_OLD="$IFS"
IFS=$'\n'
touch $(echo ~/Área\ de\ Trabalho/$@)
IFS="$IFS_OLD"

问题是,当我使用zsh运行此脚本时,如todo.sh alimentar o cachorro,文件将以名称​​ alime tar o cachorro 保存,但它在bash中运行正常。我知道这可能是一个愚蠢的错误,但我不知道如何解决这个问题。

为什么需要它?我的桌面是我的待办事项列表,它只有 - 空文件的标题是任务的描述。它最适合我,因为我的桌面总是干净,它只有我的任务。例如:

$ ls ~/Área\ de\ Trabalho/
# nothing, all tasks done

$ todo comprar leite
$ ls ~/Área\ de\ Trabalho/
total 0
-rw-rw-r-- 1 lsmagalhaes lsmagalhaes 0 Fev  5 20:28 comprar leite

$ todo comprar arroz
$ ls ~/Área\ de\ Trabalho/
total 0
-rw-rw-r-- 1 lsmagalhaes lsmagalhaes 0 Fev  5 20:28 comprar leite
-rw-rw-r-- 1 lsmagalhaes lsmagalhaes 0 Fev  5 20:29 comprar arroz

$ todo alimentar o cachorro
$ ls ~/Área\ de\ Trabalho/
total 0
-rw-rw-r-- 1 lsmagalhaes lsmagalhaes 0 Fev  5 20:28 comprar leite
-rw-rw-r-- 1 lsmagalhaes lsmagalhaes 0 Fev  5 20:29 comprar arroz
-rw-rw-r-- 1 lsmagalhaes lsmagalhaes 0 Fev  5 20:30 alime tar o cachorro  # BUG!

简单地说,该命令应保存名为alimentar o cachorro的文件,而是保存alime tar o cachorro

2 个答案:

答案 0 :(得分:2)

IFS=$'\n'是bash语法:ANSI-C quoting。我不知道zsh,但似乎zsh处理的就像IFS=n一样,这可能是alimentar变成alime tar的原因

也许你只是想要:

IFS="
"

只有引号之间的换行符。

但可能你只想忽略IFS并使用

touch ~/"Área de Trabalho/$*"

答案 1 :(得分:1)

Use More Quotes™(并简化)。这应该适用于任何shell:

touch ~/"Área de Trabalho/$1"

原始代码是......不是最佳的。 What are you trying to accomplish?