BASH自动为字符串添加引号

时间:2015-08-21 23:27:24

标签: linux bash shell

我试图编写一个简单的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

2 个答案:

答案 0 :(得分:3)

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

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

但似乎没有必要为此使用here-string。只需使用:

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

答案 1 :(得分:0)

无需引用import java.util.Scanner; public class Player { public String name; private String input; private double health; public double strength; public double stamina; public Player (String input){ name = input; } public void setHealth(double playHp){ health = playHp; } public void setStrength(double playStrn){ strength = playStrn; } public void setStamina(double playStam){ stamina = playStam; } public void printplayer(){ System.out.println("name : " + name ); System.out.println("Health :" + health); System.out.println("Strength :" + strength); System.out.println("Stamina :" + stamina); } } 运营商。 <<<默认情况下不会从标准输入读取;它将它传递给它运行的命令。

sudo