ana*_*308 0 unix directory shell
我正在编写一个shell脚本来输入多个文件夹.我目前正在将shell文件的名称存储在shell变量中path="October\ @012/".如果我这样做,cd $path我收到错误bash:cd:October \:没有这样的文件或目录
我究竟做错了什么?
这是双引号的(主要)函数,在csh和*sh shell中也是如此.
cd "$TARGET"
Run Code Online (Sandbox Code Playgroud)
应该这样做.
Shell变量在内部扩展"..."(与内部不同'...'),但是当shell解析命令行以构造传递给程序的字符串时,引用的文本被视为单个参数.
例如:
% ls -F
October @012/
% TARGET="October @012"
% cd $TARGET
bash: cd: October: No such file or directory
% cd "$TARGET"
% pwd
/tmp/t/October @012
%
Run Code Online (Sandbox Code Playgroud)
简单!
你在最初的例子中做错了是逃避引号内的空间.该空间不必转义两次,并且由于这个冗余\出现在引号内,它只是在TARGET变量中插入一个反斜杠.例如:
% TARGET="October\ @012" # wrong!
% ls
October @012/
% cd $TARGET
bash: cd: October\: No such file or directory
% cd "$TARGET"
bash: cd: October\ @012: No such file or directory
%
Run Code Online (Sandbox Code Playgroud)
此设置TARGET仅在目录被命名时才有效October\ @012,并且其中包含反斜杠(不推荐!):
% mkdir October\\\ @012
% ls -F
October\ @012/
% cd "$TARGET"
% pwd
/tmp/t/October\ @012
%
Run Code Online (Sandbox Code Playgroud)
(编辑添加示例)