BASH의 각 매개변수에 -o 접두사를 추가하세요.

BASH의 각 매개변수에 -o 접두사를 추가하세요.

-p함수에 전달된 각 매개변수에 접두사를 추가하는 방법은 무엇입니까 ?

매개변수 자체를 수정하는 것과 새 배열을 만드는 것이 모두 가능합니다.

답변1

이는 공백이 있거나 그보다 더 나쁜 복잡한 매개변수의 경우에도 잘 작동합니다.

#!/bin/bash
new_args=()
for arg
do
    new_args+=( '-p' )
    new_args+=( "$arg" )
done

for arg in "${new_args[@]}"
do
    echo "$arg"
done

시험:

$ ~/test.sh foo $'bar\n\tbaz bay'
-p
foo
-p
bar
    baz bay

답변2

${ARGS[@]/#/-p }변수를 빈 문자열로 설정 하면 IFS확장 시 공백을 유지할 수 있습니다!

# sample code
(
set -- 1 2 3 'arg with spaces' $'bar\n\tbaz bay'
printf 'oldIFS: %q\n' "$IFS"
IFS=""                       
#IFS=" "                       
printf 'newIFS: %q\n' "$IFS"
ARGS=("$@")
ARGS=( ${ARGS[@]/#/-p } )
for ((i=0; i < ${#ARGS[@]}; i++)); do
  echo "$i: ${ARGS[i]}"
done
)

함수 내에서 을 IFS사용하여 수정된 변수의 범위를 해당 함수로 제한 할 수 있습니다 declare IFS="".

답변3

매개 변수를 배열에 넣고 사용하십시오.배쉬 패턴 교체배열 교체 및 접두사 일치를 수행합니다.

ARGS=("$@")
echo ${ARGS[@]/#/-p }

이렇게 하면 각 매개변수의 시작 부분이 로 대체됩니다 -p<space>.

불행하게도 매개변수에 공백이 있으면 제대로 작동하지 않습니다. 공백은 사용 시 올바르게 유지되지만 ARGS=("$@")확장 시에는 유지되지 않습니다 ${ARGS[@]/#/-p }. 확장 주위에 큰따옴표를 추가할 수 있지만 -p arg1두 개가 아닌 하나의 매개변수를 얻게 됩니다.

-p<space>앞에 추가가 필요하지 않으면 -p확장 주위에 큰따옴표를 넣으십시오. 확장명 주위에 큰따옴표를 사용하거나 사용하지 않고 가장 적합한 것이 무엇인지 확인하십시오.

관련 정보