我在 bash 中转义字符时遇到问题。我想在不同用户下运行命令时转义单引号和双引号。出于这个问题的目的,假设我想在屏幕上回显以下内容:
'single quote phrase' "double quote phrase"
Run Code Online (Sandbox Code Playgroud)
如果我还需要切换到其他用户,我该如何转义所有特殊字符:
sudo su USER -c "echo \"'single quote phrase' \"double quote phrase\"\""
Run Code Online (Sandbox Code Playgroud)
当然,这不会产生正确的结果。
我怎样才能用 AIX 脚本正确地写这个?我的要求是在 test.txt 中写这个命令:
clock=$(prtconf -s | awk '{print $4,$5}')
Run Code Online (Sandbox Code Playgroud)
我试过这个命令:
print 'clock=$(prtconf -s | awk '{print $4,$5}')' > test.txt
Run Code Online (Sandbox Code Playgroud)
写在 test.txt 中的输出给了我:
clock=$(prtconf -s | awk {print ,})
Run Code Online (Sandbox Code Playgroud)
如果我使用" "
引号:
print "clock=$(prtconf -s | awk '{print $4,$5}')"
Run Code Online (Sandbox Code Playgroud)
它直接让我:
clock=3612 MHz
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我不记得我有时使用的解决大部分工作的确切命令和技巧,所以我尝试将它们记录到文件中以备将来参考。我通常做的只是将整个命令放入 echo 并快速将其附加到文件中。
这一直有效,但以下情况是第一次出现,我无法按照上述方式进行操作。
$ echo "cat file1.txt | paste -d, - - ## Step 3 " >> ~/globalLog.txt
Run Code Online (Sandbox Code Playgroud)
$ echo "cat file2.txt | sed 's/"//g' > file3.txt ## Step 2 " >> ~/globalLog.txt
Run Code Online (Sandbox Code Playgroud)
上面给出了一个明显的错误,因为引号没有正确关闭(下降到第二个命令 propmt(PS2
我猜?)以完成命令,即>_
在我的情况下),'
sed 命令正在使用单()引号并且双( "
) 引号用于替换 sed 表达式中的一个。
在这种情况下,我将如何附上完整的命令?