用于输入目录的Shell脚本(文件夹名称包含空格)

ana*_*308 0 unix directory shell

我正在编写一个shell脚本来输入多个文件夹.我目前正在将shell文件的名称存储在shell变量中path="October\ @012/".如果我这样做,cd $path我收到错误bash:cd:October \:没有这样的文件或目录

我究竟做错了什么?

Nor*_*ray 5

这是双引号的(主要)函数,在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)

(编辑添加示例)