首頁>Linux>source
將bash引數連線到帶空格的單个字元串中 (3个答案) 已關闭 14小時前
最新回復
  • 5月前
    1 #

    在Korn /類似POSIX的外壳中,而 "[email protected]" 擴充套件到所有位置引數,在列表上下文中分隔(在列表上下文中), "$*" 擴充套件為位置引數与 $IFS的第一个字元(帶一些shell的位元組)的並置 ¹或使用SPC(如果是 $IFS) 是未設置的,如果没有,則為空 設置為空字元串。

    $IFS / ksh / zsh / bash (具有陣列支援的類似Bourne的外壳),對於 yash来說都是相同的 vs維兹威兹

    "${array[@]}""${array[*]}"zsh一樣 在 "$array"時 / "${array[*]}" ,和 ksh一樣 .在 bash ,与 "${array[0]}"相同

    yash ,您可以使用 "${array[@]}"將具有任意分隔符的陣列元素連線在一起 引數擴充套件標志: zsh 例如加入太空.它不仅限於單个字元/位元組的字元串,還可以使用 j 例如並使用 "${(j[ ])array}" 引數擴充套件標志,以便能够在分隔符規範中使用轉義序列或變數(例如 "${(j[ and ])array}" 加入TAB和 p 加入 "${(pj[\t])array}"的內容 ).另见 "${(pj[$var])array}" 快捷方式標志(与 $var相同 )加入換行符。

    所以在這裏:

    F
    

    或者只是POSIXly:

    pj[\n]
    

    對於某些shell(包括bash,ksh93,mksh和bosh,但不包括破折號,zsh或yash),也可以使用 ores_simple_push() ( set -o errexit -o pipefail git add . git add -A args=("[email protected]") if [[ ${#args[@]} -lt 1 ]]; then args+=('squash-this-commit') fi IFS=' ' git commit -am "${args[*]}" || true git push ) 在這裏。

    為了完整起见,在 ores_simple_push() ( set -o errexit git add . git add -A [ "$#" -gt 0 ] || set square-this-commit IFS=' ' git commit -am "$*" || true git push )中 ,以使用任意字元串連線陣列(相当於zsh的 "${*-square-this-commit}" ),您可以這樣做:

    bash
    

    (假設 joined=${(ps[$sep])array} 是語言環境中的有效文字; 如果没有,如果 IFS= joined="${array[*]/#$sep}" joined=${joined#"$sep"}的內容有第二步失败 最终与其他內容並置時会形成有效的文字。


    ¹作為歷史記錄,在Bourne外壳中,無論 $sep的value如何,它们都与SPC相连。

  • 5月前
    2 #

    實際上,這似乎可行,但我不知道為什麼:

    $sep
    
    $IFS

  • ubuntu:尽管安裝了wine-gecko 2471,wine仍找不到wine Gecko
  • command line:登錄時解鎖SSH密钥