我正在尝试在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
。
答案 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?