簡體   English   中英

在 unix 中執行測試命令時導致問題的變量:: find $PWD -type d -exec sh -c 'test "{}" ">" "$PWD/$VersionFolders"'; -打印|wc -l`

[英]Variable causing issue while doing the test command in unix:: find $PWD -type d -exec sh -c 'test "{}" ">" "$PWD/$VersionFolders"' ; -print|wc -l`

在 unix 命令中執行測試命令時導致問題的變量是:

find $PWD -type d -exec sh -c 'test "{}" ">" "$PWD/$VersionFolders"' \; -print|wc -l`

輸入值-

這里 $PWD- 當前目錄

b1_v.1.0 b1_v.1.2 b1_v.1.3 b1_v.1.4

給定版本文件夾為 $VersionFolders b1_v.1.2

該命令應檢查當前目錄中是否存在任何大於給定版本文件夾的文件夾,並且它應該計數或顯示。 這種方法必須考慮到創建文件夾的日期或時間。

預期輸出 - b1_v.1.3 b1_v.1.4

如果我給硬代碼目錄它工作正常。 但是當我像變量一樣傳遞它時,它會給出所有文件夾。

工作正常這個表揚-

find $PWD -type d -exec sh -c 'test "{}" ">" "$PWD/b1_v.1.2"' \; -print|wc -l`

不使用此命令與變量 - find $PWD -type d -exec sh -c 'test "{}" ">" "$PWD/$VersionFolders"'; -打印|wc -l`

變量$VersionFolders不會在單引號內擴展,顯然您沒有export它以使其對子進程可見。

一個晦澀但常見的 hack 是將它放在$0中(名義上應該包含 shell 本身的名稱,並且是sh -c '...'之后的第一個參數)因為這樣可以使代碼簡單。

find . -type d \
  -exec sh -c 'test "$1" ">" "$0"' \
    "$VersionFolders" {} \; \
  -print | wc -l

但正如@chepner 所說,您可以運行-exec test {} ">" "$VersionFolders" \; 直接地。

shell 已經完成了當前目錄中的所有操作,因此您無需拼寫$PWD 也許另請參閱當前工作目錄到底是什么?

暫無
暫無

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

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