终端(bash) - 来自读取输入字符串的mkdir

时间:2016-09-15 15:51:47

标签: bash macos input terminal mkdir

我在OSX中使用Terminal(bash)并尝试创建一个可以从输入创建目录的可执行脚本,但是在输入带空格的字符串时我遇到了问题(我需要空格)。

例如,在下面的代码中输入“new folder”时,它会创建两个名为“new”和“folder”的文件夹。

read dName; mkdir $dName

但是使用下面的代码,出于某种原因我得到一个名为this的文件夹:“%80%9D

read dName; mkdir "$dName"

如果我在不使用可执行脚本的情况下将第二个代码放入终端,则可以正常工作。我不确定为什么使用可执行脚本来运行它会给我“%80%9D而不是文件夹名称。如果可能请帮助。

1 个答案:

答案 0 :(得分:1)

您在脚本中使用的是引号,而不是常规的ASCII引号。您的脚本是UTF-8编码的,这意味着<div class="row"> <div class="col-xs-12 col-sm-6 col-md-6"> <div class="form-group"> <select id="s1" multiple="multiple" class="form-control" name="stype" onchange="showfield1()" required> <option>Diamond</option> <option>Ruby</option> <option>Sapphire</option> <option>Emerald</option> <option>Tanzanite</option> <option>Pink Sapphire</option> <option>Aqua</option> <option>Blue Topaz</option> <option>Amethyst</option> <option>Pearl</option> <option>Garnet</option> <option>Citrine</option> <option>Opal</option> <option id="optionOther">Other</option> </select> <script type="text/javascript"> function showfield1() { if (document.getElementById('optionOther').selected) { document.getElementById('div1').innerHTML = '<input type="text"' + ' class="form-control" name="stypeother"' + ' placeholder="Please Specify"/>'; } else { document.getElementById('div1').innerHTML = ''; } } </script> <div id="div1"></div>的参数存储为以下字节流:

  • mkdir - 左卷曲引语
  • e2 80 9c - 24 64 4e 61 6d 65
  • $dbash - 右卷曲引语

但是,当脚本运行时,这些字节似乎是使用ISO-Latin-1解释的。由于e2 80 9d是标识符名称的有效字节,并且卷曲引号实际上不会转义任何内容,e2bash视为单个未定义变量的扩展,它扩展为空字符串。因此,$dBash%E2接收mkdir作为其参数。创建请求的文件名。列出目录时,前三个字节再次被解释为UTF-8以显示左侧卷曲引号,但其余两个字节没有解释并显示为原样。