0

我正在查看一些别名以快速保存当前目录,以便以后打开它。

ALIAS cdo='pwd|sed 's/ /\ /g' > ~/.cdo'
AIIAS cdn='cd "$(cat ~/.cdo)"'

sed 命令显然处理空格。

但是,我仍然有一个无法解决的奇怪问题,它必须涉及变量解释。

jk@bt:~# cd Hello\ World/
jk@bt:~/Hello World# pwd|sed 's/ /\\ /g' > ~/.cdo
jk@bt:~/Hello World# cat ~/.cdo
/home/jk/Hello\ World
jk@bt:~/Hello World# cd ..
jk@bt:~# cd "$(cat ~/.cdo)"
bash: cd: /home/jk/Hello\ World: No such file or directory
4

2 回答 2

2

在我看来,好像您将掩蔽加倍。

处理空格的一种方法是用反斜杠单独屏蔽它们:

 cd here\ I\ go 

或用双引号掩盖所有这些:

 cd "here I go" 

虽然这也是允许的:

 cd here" I "go

然而,混合它们意味着,你想要字面上的反斜杠:

 cd "here\ I\ go" 

这就是正在发生的事情。

Note that while not very common, tabs and newlines can be included in files as well. Masking them works the same way, but reading them from a file might be different, and multiple blanks are often condensed by the shell to a single one.

于 2012-06-05T15:32:28.920 回答
1

\如果文件名不在 and 之间",您必须转义"

在 cdn 中转义cdo但不使用"

ALIAS cdo='pwd|sed 's/ /\ /g' > ~/.cdo'
AIIAS cdn='cd $(cat ~/.cdo)'

不逃避和使用""(我认为这更好

ALIAS cdo='pwd > ~/.cdo'
AIIAS cdn='cd "$(cat ~/.cdo)"'
于 2012-06-05T15:30:51.137 回答