我在OSX中使用Terminal(bash)并尝试创建一个可以从输入创建目录的可执行脚本,但是在输入带空格的字符串时我遇到了问题(我需要空格)。
例如,在下面的代码中输入“new folder”时,它会创建两个名为“new”和“folder”的文件夹。
read dName; mkdir $dName
但是使用下面的代码,出于某种原因我得到一个名为this的文件夹:“%80%9D
read dName; mkdir "$dName"
如果我在不使用可执行脚本的情况下将第二个代码放入终端,则可以正常工作。我不确定为什么使用可执行脚本来运行它会给我“%80%9D而不是文件夹名称。如果可能请帮助。
答案 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
是标识符名称的有效字节,并且卷曲引号实际上不会转义任何内容,e2
将bash
视为单个未定义变量的扩展,它扩展为空字符串。因此,$dBash%E2
接收mkdir
作为其参数。创建请求的文件名。列出目录时,前三个字节再次被解释为UTF-8以显示左侧卷曲引号,但其余两个字节没有解释并显示为原样。