我想嵌入評論這樣是否可以使用反斜槓分割線時使用註釋?
ls -l \
-a \
# comment here
-h \
-t .
但似乎是不可能的。也許還有其他一些變體存在?在反斜槓之後放置註釋或用反斜槓結束註釋並不會有幫助。
我想嵌入評論這樣是否可以使用反斜槓分割線時使用註釋?
ls -l \
-a \
# comment here
-h \
-t .
但似乎是不可能的。也許還有其他一些變體存在?在反斜槓之後放置註釋或用反斜槓結束註釋並不會有幫助。
據我所知,這是不可能的,因爲Bash試圖遵循POSIX準則和其他標準。 特別:
如果
<newline>
反斜槓後,外殼應解釋爲續行。在將輸入分解爲令牌之前,應去除反斜槓和<newline>
。由於轉義的<newline>
被完全從輸入中刪除,並且不被任何空格替換,因此它不能用作令牌分隔符。
- shell命令行語言,2.2.1 Escape Character (Backslash)
因此,它是不可能的,因爲殼分析器是如何工作的:
#
的行是註釋,並沒有什麼後獲取評估(包括尾部\
)\
不在行尾,是而不是行跳過。在你的腳本:
ls -l \
-a \
# comment here
-h \
-t .
註釋行被替換爲空(即它沒有令牌);並且由於該命令到目前爲止有效,並且滿足換行符(… -a ↵
),因此shell運行ls -l -a
命令,然後運行-h -t .
命令(並且在$PATH
中找不到-h
二進制文件,因此它會在此處停止。 )
我不認爲你可以直接做到這一點,因爲評論去除比反斜線線連接前完成的,所以這是行不通
# commenting \
seveal lines
顯而易見的解決方案是使用#
上每一行:
# commenting
# seveal lines
如果你想有創意,你可以使用一個骯髒的伎倆:
: 'This is almost
a multiline comment'
實際上並不是一條評論,但它什麼都不做,除了將退出代碼更改爲0.
這是不可能的。因爲反斜線線繼續者和註釋的單個字符,這使得其忽略,直到行尾右側的一切:
ls \
# -l \
-h
的-l
會被忽略,在ls
命令執行,被認爲是新的命令-h
。
因爲在類似C的語言中你有意見的邊界:/* */
可以將這些標記放置在使用行連續的表達式中。
不是直接,給你買可以把這樣的註釋放在數組中。 (這也可以讓你拆分到多個線路的參數,而無需使用續行。)
cmd_options=(
-l
-a
# comment here
-h
-t .
)
ls "${cmd_options[@]}"
在這種情況下,我通常的東西去像
ls -l -a -h -t .
# | | | time sort
# | | human readable
# | all files
# long format
或我使用參數的長表當他們存在時,例如--human-readable
而不是-h
。
現在想象一下,你的實際命令行由多個參數組成,每個參數都帶有一個字符串,因此整個命令需要多行。 – tijagi
@tijagi在這種情況下,我會按照組的方式將參數分配給具有有意義名稱的變量,例如,通常在Makefile中進行。然後,您可以將變量賦值與註釋交錯。 – damienfrancois
...它可以管後進行:
echo "Hello beautiful" | \
# Display match only:
grep -o beautiful
但是,否則......沒有。
你可以做這樣的事情有一個數組,它不需要繼續符:
ls_cmd=(
ls
-l # long form
-a # show hidden files
-h # human-readable sizes
-t # sort by time
.
)
"${ls_cmd[@]}" # run the command from the array
...但一般情況下,答案是否定的。
在您的最後一段中,遇到的換行符位於註釋的結尾處,而不是在「-a」後面。 – spkersten
@spkersten這是真的,我還不夠清楚(我用空格字符來表示一個換行符,但我應該用代替)。謝謝! – Diti