簡體   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