簡體   English   中英

重擊:使用反引號在引號中使用空格執行命令

[英]Bash: Execute command with spaces in quotes using backticks

我編寫了以下bash函數。 應該打印一個命令,運行它並打印其輸出,然后打印簡短說明。

#!/bin/bash

print_and_run_command() {
    COMMAND="$1"
    DESCRIPTION="$2"
    OUTPUT="`$COMMAND`"
    printf "%-30s %-30s %s\n" "$COMMAND" "$OUTPUT" "$DESCRIPTION"
}

print_and_run_command "date +%S" "Second"
print_and_run_command" date +%H" "Hour"
print_and_run_command "date +%Y-%m-%dT%H:%M:%S%z" "T-separated rfc 3339 / ISO 8601"

從shell執行時,每個date命令都可以很好地工作。 但是,在運行腳本時,會發生一個奇怪的錯誤:

date +%S                       34                             Second
./blah.sh: line 11: print_and_run_command date +%H: command not found
date +%Y-%m-%dT%H:%M:%S%z      2013-07-30T14:20:34-0700       T-separated rfc 3339 / ISO 8601

即使date +%S和復雜的date +%Y-%m-%dT%H:%M:%S%z正常運行,運行date +%H也會失敗。

任何想法都使print_and_run_command" date +%H" "Hour"失敗嗎?

好吧,讓set -x幫助我們了解實際情況。

+ print_and_run_command 'date +%S' Second
+ COMMAND='date +%S'
+ DESCRIPTION=Second
++ date +%S
+ OUTPUT=13
+ printf '%-30s %-30s %s\n' 'date +%S' 13 Second
date +%S                       13                             Second
+ 'print_and_run_command date +%H' Hour
./oh.sh: line 13: print_and_run_command date +%H: command not found
+ print_and_run_command 'date +%Y-%m-%dT%H:%M:%S%z' 'T-separated rfc 3339 / ISO 8601'
+ COMMAND='date +%Y-%m-%dT%H:%M:%S%z'
+ DESCRIPTION='T-separated rfc 3339 / ISO 8601'
++ date +%Y-%m-%dT%H:%M:%S%z
+ OUTPUT=2013-07-31T01:24:13+0400
+ printf '%-30s %-30s %s\n' 'date +%Y-%m-%dT%H:%M:%S%z' 2013-07-31T01:24:13+0400 'T-separated rfc 3339 / ISO 8601'
date +%Y-%m-%dT%H:%M:%S%z      2013-07-31T01:24:13+0400       T-separated rfc 3339 / ISO 8601
+ set +x

所以這是你的錯誤:

print_and_run_command" date +%H" "Hour"

它應該是

print_and_run_command "date +%H" "Hour"

print_and_run_command" date +%H" "Hour"失敗,因為將print_and_run_command" date +%H"擴展為print_and_run_command date +%H ,這是Shell的未知命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM