完全なパス名を含む変数があります。私はパス内の単語の最後の出現箇所を条件付きで置き換えようとしています。スクリプトの例は、私がしようとしています何を表示する
#!/bin/sh
testvar="/home/downloads/user/downloads"
if [ "$1" = "alternate" ]; then
newtestvar=$(echo $testvar | sed -e 's/\(.*\)downloads$/\1alternate_downloads/g')
else
newtestvar=$(echo $testvar | sed -e 's/\(.*\)downloads$/\1new_downloads/g')
fi
echo "testvar:" $testvar
echo "newtestvar:" $newtestvar
ラン#1
$ ./foofile
testvar: /home/downloads/user/downloads
newtestvar: /home/downloads/user/new_downloads
ラン#2
$ ./foofile alternate
testvar: /home/downloads/user/downloads
newtestvar: /home/downloads/user/alternate_downloads
私が意図した結果を得るかが、私は探していますif/elseを避けて、むしろsedの文脈で$ 1をチェックすることで結果を達成する方法です。
編集-1
私は速記を以下にif/else
ブロックを置き換えます。それは本当に不器用で読みにくいようです。
newtestvar=$([[ $1 = "alternate" ]] && echo $testvar | sed -e 's/\(.*\)downloads$/\1alternate_downloads/g' || echo $testvar | sed -e 's/\(.*\)downloads$/\1new_downloads/g')
代わりsed' 'で、' $(dirnameは "$のtestvar")を使用 "/ alternate_downloads" 'と' $(dirnameは "$のtestvar") "/ new_downloads" '...明快にするためにif-elseを使うのに間違いはありません – Sundeep
'#!/ bin/sh 'を使用したときに 'bash'と質問された理由 – anubhava