현재 접근 방식:
sudo awk 'BEGIN{printf "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<hello>\n\t<world>\n";} {print "\t\t",$0}END{printf "\t </world>\n</hello>\n"}' hello > hello2
선호하는 방법이 작동하지 않습니다:
hello > hello2
코드 중복을 피하기 위해 변수로 정의되기를 원함
$CURRENT_TO_OUT=hello > hello2
echo "CP1" $CURRENT_TO_OUT
sudo awk 'BEGIN{printf "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<hello>\n\t<world>\n";} {print "\t\t",$0}END{printf "\t </world>\n</hello>\n"}' $CURRENT_TO_OUT
$CURRENT_TO_OUT 출력:
CP1 hello
답변1
명령줄은 일반적으로 변수가 확장된 후에 다시 해석되지 않습니다. eval
원하는 행동을 얻으려면 전화해야 합니다 .
당신은 실제로XY 문제. 코드 중복을 방지하려면 대신 셸 함수를 사용하세요.
convert_func(){
echo "CP1 $1" > "$2"
sudo awk 'BEGIN{printf "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<hello>\n\t<world>\n";} {print "\t\t",$0}END{printf "\t </world>\n</hello>\n"}' "$1" > "$2"
}
convert_func input1 targetfile1
convert_func input2 targetfile2