我最近遇到了一种情况,我尝试!
在 shell 脚本中将字符串数组用作记录分隔符。当我在 shell 脚本中使用它时,脚本会自动扩展。重现这种情况的示例如下。
check_variable="Hello"
echo "$check_variable"
Output: Hello
###For multiple strings, I tried to concatenate with ! as a record separator.
echo "$check_variable !"
Output: echo "$check " > Results.txt
经过一番研究,我发现它!
实际上是一个特殊字符,不应该用作记录分隔符。那么,到底为什么要!
使用呢?有什么方法可以关闭该!
角色并在 shell 脚本中使用它吗?
答案1
!
实际上,对于为什么使用 from有一个很好的解释这里。为了更清楚地理解该命令,我执行了以下命令。
pwd- It gives the present working directory.
!pwd - It executes the previously executed pwd command.
此设置可能很危险,因为用户可能会!rm
错误执行,从而导致前所未有的结果。
测试角色有效性的另一种方法!
是,
echo "12345647" >> ramesh.txt
cat ramesh.txt
12345647
!echo
cat ramesh.txt
12345647
12345647
我们可以看到,该!echo
命令实际上已被执行,并附加了以下行1234567到文件。
尽管不建议在脚本中使用特殊字符作为文件分隔符或记录分隔符,但可以通过执行以下命令覆盖此设置。
set -H turns it on;
set +H turns it off.
答案2
不直接相关,但请记住,将内容括在“”中会插入所说的内容。在你的第一行:
check_variable="Hello"
字符串中没有任何内容需要解释,那么为什么要这样做呢?当您通过 echo 使用 $check_variable 时,这也适用
check_variable='Hello'
echo $check_variable
这将导致 Hello 按照您的预期打印出来。
如果你必须使用保留字符作为分隔符,通过 echo 使用它时不要引用它:
$ echo $check_variable ! > Results.txt
$ cat Results.txt
Hello !
$ echo '$check_variable !'
$check_variable !
请记住,在这种情况下,echo 只是打印出它收到的每个参数(echo 行中的 ! 被视为第二个参数),并且并非所有命令都会执行类似的操作。在这种情况下,Bash 不会将其视为特殊的,因为 A)它是另一个命令的参数,并且 B)您不会尝试通过将其括在“”中来插入它。最后一个回显只是为了表明使用 '' 会将其中的所有内容视为字面意思 - 没有任何插值。
尽管如此,我还是会重复其他字符,并说您应该尽可能避免将特殊/保留字符用作其预期用途之外的任何内容(如果可能的话)。