1 command-line bash terminal variable
我有一个小 test.sh 脚本,如下所示:
#!/bin/bash
read -e -p "Enter a Directory: " directory
echo $directory
Run Code Online (Sandbox Code Playgroud)
这是我运行时发生的情况:
$ ./test.sh
Enter a Directory: ~/A\ Directory/
/Users/<username>/A Directory/
Run Code Online (Sandbox Code Playgroud)
我希望能够将转义空间保留在该变量内,以便程序输出为:
$ ./test.sh
Enter a Directory: ~/A\ Directory/
/Users/<username>/A\ Directory/
Run Code Online (Sandbox Code Playgroud)
有人知道怎么做吗?其用途是告诉脚本在哪里查找它需要读取的文件。
编辑:我忘记将 \ 放在第二个和第三个代码选择中。
变量中没有要保留的转义空间。当您在提示符下输入时~/A Directory/
,变量directory
包含~/A Directory/
. 如果您稍后在脚本中遇到此空格问题,那是因为您忘记了变量扩展周围的双引号。
read -e -p "Enter a Directory: " directory\nls -- "$directory"\ncd -- "$directory"\n
Run Code Online (Sandbox Code Playgroud)\n\n如果--
值以 开头-
,则不会将其视为选项。
如果出于某种原因你想在空格前添加反斜杠,你可以使用bash 的字符串操作功能来完成。
\n\necho "${directory// /\\\\ }"\n
Run Code Online (Sandbox Code Playgroud)\n\n但这不太可能有用。如果需要以再次解析的形式打印出目录,肯定还会有其他字符需要引用。哪些字符取决于要解析它的内容,但至少制表符(和换行符,但您的脚本无法读取它们)将需要引用(如果空格),并且还需要引用反斜杠。Bash 没有方便的方法来做到这一点。您可以使用 sed,但在将数据传递给它时要小心 \xe2\x80\x94\xc2\xa0echo
不会打印所有未修改的参数。增加难度的命令替换会删除尾随换行符,但这里不会有换行符。
quoted_directory=$(printf %s "$directory" | sed \'s/[\\\\ \'$\'\\t\'\']/\\\\&/\')\n
Run Code Online (Sandbox Code Playgroud)\n\n另请注意,这里没有任何内容在开头扩展波形符。(你显示的输出是伪造的,你太顽皮了!)波形符扩展仅作为源代码解析的一部分发生,当变量的值扩展时不会发生。如果您想用主目录替换初始波浪号,则需要手动执行此操作。
\n\nread -e -p "Enter a Directory: " directory\nif [[ $directory = \\~/* ]]; then\n directory="$HOME/${directory#*/}"\nfi\nls -- "$directory"\ncd -- "$directory"\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
12706 次 |
最近记录: |