[英]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.