Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash避免文件名解释_Bash_Variables_Interpretation - Fatal编程技术网

Bash避免文件名解释

Bash避免文件名解释,bash,variables,interpretation,Bash,Variables,Interpretation,我正在寻找一些别名来快速保存当前目录,以便以后可以打开它 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

我正在寻找一些别名来快速保存当前目录,以便以后可以打开它

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

如果文件名不在

在cdn中使用
cdo进行转义,但不使用

ALIAS cdo='pwd|sed 's/ /\ /g' > ~/.cdo'
AIIAS cdn='cd $(cat ~/.cdo)'
不转义并使用
(我认为这样更好)


如果文件名不在

在cdn中使用
cdo进行转义,但不使用

ALIAS cdo='pwd|sed 's/ /\ /g' > ~/.cdo'
AIIAS cdn='cd $(cat ~/.cdo)'
不转义并使用
(我认为这样更好)


在我看来好像你在加倍伪装

处理空格的一种方法是使用反斜杠分别屏蔽空格:

 cd here\ I\ go 
或者用双引号遮住它们:

 cd "here I go" 
虽然这也是允许的:

 cd here" I "go
但是,混合它们意味着,您需要字面上的反斜杠:

 cd "here\ I\ go" 
这就是正在发生的事情


请注意,选项卡和换行符虽然不是很常见,但也可以包含在文件中。屏蔽它们的工作方式相同,但从文件中读取它们可能会有所不同,而且shell通常会将多个空格压缩为一个空格。

在我看来,好像是在加倍屏蔽

处理空格的一种方法是使用反斜杠分别屏蔽空格:

 cd here\ I\ go 
或者用双引号遮住它们:

 cd "here I go" 
虽然这也是允许的:

 cd here" I "go
但是,混合它们意味着,您需要字面上的反斜杠:

 cd "here\ I\ go" 
这就是正在发生的事情


请注意,选项卡和换行符虽然不是很常见,但也可以包含在文件中。屏蔽它们的工作方式相同,但从文件中读取它们可能会有所不同,shell通常会将多个空格压缩为一个空格。

请参阅以了解发生这种行为的原因:引用变量替换(这是正确使用的!)不会处理转义,也不应该。使用和
dirs
命令解决这个问题要好得多。请查看acd_func.sh--扩展bash的CD,以便在See上保存、显示和访问访问目录名的历史记录,以了解发生这种行为的原因:引用变量替换(这是正确的使用!)不处理转义,也不应该处理转义。使用和
dirs
命令解决此问题要好得多。请查看acd_func.sh--扩展bash的CD以保留、显示和访问问题所在目录名的历史记录,而不是,他不应该在不需要解析的内容中进行手动转义。那么,你的第二个例子是正确的,但是这个解释是误导性的。问题是,他不应该对那些不会被解析的内容进行手动转义。那么,你的第二个例子是正确的,但解释是误导性的。