물고기 셸 목록을 반복하고 해당 값을 저장하는 요소의 값을 해당 목록으로 변경하려고합니다.Fish Shell 스크립트가있는 루프 목록의 값 변경
원래의 목록은 다음과 같이 채워집니다
emacsclient.dockitem firefox.dockitem monodevelop.dockitem Thunar.dockitem
지금 나는 그것을 반복하고 문자열 "dockitem"를 변경하려면 :
이 작동하고set -l dockApplications (ls $HOME/.config/plank/dock1/launchers/)
이 같은 목록을 생성 "데스크톱".
나는 루프를 시도하지만 올바르게 사용하는 것으로 표시되지 않습니다 :
for application in $dockApplications
echo $application
set application (string replace 'dockitem' 'desktop' $application)
echo $application
echo "==========="
end
이것은 이전과 문자열 수술 후 메아리와 나는 올바른 문자열을 생산하고 있습니다. 하지만 for 루프 뒤에 echo $dockApplications
같은 것을 할 때. "dockitem"확장자를 가진 문자열 목록을 얻습니다.
은 또한 설정을 시도 한 $dockApplications
변수 다르게 좋아 :
set -l dockApplications (string replace 'dockitem' 'desktop' (ls $HOME/.config/plank/$dockdir/launchers/))
그러나이 "dockitem"확장자를 가진 문자열의 같은 목록을 반환하는 것입니다.
변수가 할당되는 방식이나 범위가 여기에서 처리되는 방식을 근본적으로 오해한다고 생각합니다.
필자는 쉘 스크립팅에 대해 완전히 머리를 감쌌다. 나는 그것을 읽을 수 있고 무슨 일이 일어나고 있는지를 알 수있다. 그러나 그것을 구현하는 것에 관해서는 내가 다른 언어로하는 방식으로 뭔가를 성취하려고 할 때 몇 도로 블록을 쳤다. 그러나 나는 쉘 스크립팅의 힘을 깨닫고 그것에 대해 더 잘하고 싶습니다. 그래서 물고기 껍데기 관용적 인 방법으로 이것을하는 방법에 대한 모든 조언은 크게 감사하겠습니다.
쉘 언어에서 능숙 해지는 데 도움이되는 것이 내 팔꿈치에서 수동으로 수행하는 것입니다. 에스. –
'application' var은 원래 값을 참조하지 않고 값의 복사본을 가져옵니다. 원본 값의 사본을 수정하고 있습니다. Glenn이 제공 한 솔루션 외에도 원래 배열을 수정하지 않는 것이 좋습니다. 원래 배열을 반복하면서 새로운 배열을 만듭니다. –