繁体   English   中英

BASH自动在字符串中添加引号

[英]BASH automatically adding quotes to string

我正在尝试编写一个简单的bash脚本,该脚本执行带有一个字符串变量的命令。 在执行时,bash将单引号添加到字符串变量中,使该命令无用。 如何在不包含bash脚本引号的情况下执行命令?

#!/bin/bash
key=$(echo $1 | tr '[:lower:]' '[:upper:]')
sudo tee /proc/acpi/bbswitch \<\<\<$key

我得到的输出是

~/scripts$ bash -x nvidia on
++ echo on
++ tr '[:lower:]' '[:upper:]'
+ key=ON
+ sudo tee /proc/acpi/bbswitch '<<<ON'

我想不带引号运行的两个命令是

sudo tee /proc/acpi/bbswitch <<<ON

要么

sudo tee /proc/acpi/bbswitch <<<OFF

问题不在于引号,而是sudo不能通过外壳执行命令。 因此,像<<<这样的元字符作为sudo参数给出时,没有任何特殊含义。 您需要显式调用外壳程序:

sudo bash -c "tee /proc/acpi/bbswitch <<<$key"

但是,实际上似乎并不需要使用here-string。 只需使用:

echo "$key" | sudo tee /proc/acpi/bbswitch

无需引用<<<运算符。 sudo默认不从其标准输入中读取; 它通过它传递给它运行的命令。

sudo tee /proc/acpi/bbswitch <<< $key

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM