私のスクリプト:
#!/usr/bin/env bash
PATH=/home/user/example/foo/bar
mkdir -p /tmp/backup$PATH
そして今、「$ PATH」の最初のフォルダを取得したい:/ home /
cd /tmp/backup
rm -rf ./home/
cd - > /dev/null
上記の例のように最初のフォルダーを常に検出するにはどうすればよいですか? 「dirname $ PATH」は単に「/ home/user/example/foo /」を返します。
前もって感謝します! :)
私は解決策を見つけました:
#/usr/bin/env bash
DIRECTORY="/home/user/example/foo/bar"
BASE_DIRECTORY=$(echo "$DIRECTORY" | cut -d "/" -f2)
echo "#$BASE_DIRECTORY#";
これは常に最初のディレクトリを返します。この例では、以下を返します。
#home#
Awkでのアイデアを@condorwasabiに感謝します! :)
PATH
が常に絶対形式である場合、次のようなトリックを実行できます
ROOT=${PATH#/} ROOT=/${ROOT%%/*}
または
IFS=/ read -ra T <<< "$PATH"
ROOT=/${T[1]}
ただし、実際に意図しない限り、バイナリファイルの検索ディレクトリが変更されるため、他の変数を使用し、PATH
を使用しない方がよいことも付け加えておきます。
また、readlink -f
またはreadlink -m
を使用してパスを絶対形式に変換することもできます。
ABS=$(readlink -m "$PATH")
私の関数 getabspath を参照することもできます。
次のawkコマンドを試すことができます。
basedirectory=$(echo "$PATH" | awk -F "/" '{print $2}')
この時点で、basedirectory
は文字列homeになります。次に、次のように記述します。
rm -rf ./"$basedirectory"/
最初の火力を取得するには:
path=/home/user/example/foo/bar
mkdir -p "/tmp/backup$path"
cd /tmp/backup
arr=( */ )
echo "${arr[0]}"
PS:スクリプトでPATH変数を使用しないでください。デフォルトのPATHを上書きし、スクリプトは多くのシステムユーティリティを実行できなくなります
編集:おそらくこれはあなたのために働くはずです:
IFS=/ && set -- $path; echo "$2"
home
純粋なbash:
DIR="/home/user/example/foo/bar"
[[ "$DIR" =~ ^[/][^/]+ ]] && printf "$BASH_REMATCH"
正規表現を簡単に調整できます。