4 bash shell-script quoting variable-substitution
我正在编写一个 Bash 脚本来帮助正确地对硬盘进行分区,但我遇到了一个奇怪的问题,我必须将一个数字附加到一个变量中。我花了一段时间才得到正确的结果,因为我对 Bash 不是很有经验,但我设法做了一些临时的事情。
这是我正在构建的示例:
#!/bin/bash
devName="/dev/sda"
devTarget=$devName\3
echo "$devTarget"
Run Code Online (Sandbox Code Playgroud)
变量devName是/dev/sda,但我还需要稍后在脚本中为第三个分区设置一个变量,所以我使用了\符号,它让我将数字添加3到/dev/sda以进行输出/dev/sda3
尽管该\符号有效,但我只是想知道这是否是执行此类操作的正确方法。我使用它是因为在 Python 中它习惯于忽略引号等的以下字符,但我想在这种情况下做相反的事情,所以令人惊讶的是它起作用了。如果这不是添加变量的最佳方法,请有人举例说明在 Bash 中执行此操作的最佳方法。
小智 8
将变量插入字符串的安全方法是使用${var_name}. 例如:
#!/bin/bash
devName="/dev/sda"
devTarget="${devName}3"
echo "$devTarget"
Run Code Online (Sandbox Code Playgroud)
这样 Bash 就不会怀疑要插入的变量是什么。
顺便说一句,有趣的devTarget=$devName\3工作原理。我不知道为什么。
$x\b以与$x"b"or相同的方式"$x"b工作,引号结束变量名。如果没有其他原因,我认为这是因为在扩展变量时引号仍然存在并且\"'变量名中没有一个是有效的。
该标准文本说:
单词扩展顺序如下:
1. ...,参数扩展(见参数扩展),...
4. 报价删除(见报价删除)应始终最后执行。
而“引用删除”是实际删除引号字符的步骤。
但是,正如@tomasz在他们的回答中所说,在变量名周围加上大括号是通常的做法,所以"${x}b", 或"${devName}3"。您几乎总是想在扩展周围加上引号,请参阅何时需要双引号?
(不过,我想知道是否还有其他方法可以在程序中标记带引号的字符串,而不是实际保留引号字符。)
| 归档时间: |
|
| 查看次数: |
10275 次 |
| 最近记录: |