タグ付けされた質問 「parameter」

7
シェル引数を逆順で出力します
私は少し立ち往生しています。私の仕事は、3番目と4番目を除いて、スクリプトへの引数を逆の順序で出力することです。 私が持っているのはこのコードです: #!/bin/bash i=$# for arg in "$@" do case $i in 3) ;; 4) ;; *) eval echo "$i. Parameter: \$$i";; esac i=`expr $i - 1` done 私はeval(PHPへの挨拶)が嫌いなので、それなしで解決策を探していますが、それを見つけることができません。 引数の位置を動的に定義するにはどうすればよいですか? PS:いいえ、宿題ではありません。試験のシェルを学んでいるので、古い試験を解決しようとしています。

2
bash関数のオプションパラメータ
こんな感じのSVNブランチを素早く作る機能があります function svcp() { svn copy "repoaddress/branch/$1.0.x" "repoaddress/branch/dev/$2" -m "dev branch for $2"; } アドレスなどを調べてコピーして貼り付ける必要なしに、新しいブランチをすばやく作成するために使用します。ただし、メッセージ(-mオプション)の場合は、3番目のパラメーターを指定するとメッセージとして使用され、それ以外の場合は「$ 2の開発ブランチ」の「デフォルト」メッセージが使用されるようにしたいと思います。これがどのように行われるかを誰かが説明できますか?

1
コマンドの一部としてスペースを含むBashエイリアス
エイリアス自体にスペースがあるbashエイリアスを作成しようとしています。 考え方は、エイリアス(つまりcon)はの略ですsudo openvpn --config /path/to/my/openvpn/configs/。conエイリアスを使用すると、読み取り可能なコマンドになります。 すなわち: `con uk.conf` == `sudo openvpn --config /path/to/my/openvpn/configs/uk.conf` 次のようにエイリアスを宣言できないことを理解しています con ="sudo openvpn --config /path/to/my/openvpn/configs/"。このシナリオではbash関数は機能しますか?私はそれについて聞いたことがありませんが、このマイナーな問題の解決策を研究するとき。

2
bash配列の要素数をカウントします。配列の名前は動的です(つまり、変数に格納されます)。
質問の簡単な説明: 配列の完全なコピーを作成したり、配列を使用したりせずに、配列の名前が動的である(つまり、変数に格納されている)bash配列の要素数をカウントする組み込みのbashメソッドはありevalますか? 詳しくは: bashパラメータ置換を使用すると、次のことができます。 配列の長さを決定します myArr=(A B C); echo ${#myArr[@]}。 変数を名前で間接的に参照します NAME=myVar; echo ${!NAME}(これは配列要素にも適用されます): NAME=myArr[1]; echo ${!NAME} しかし、配列の名前が別の変数に格納されている場合、配列内の要素の数をどのように決定できますか?(これは、上記の2つのパラメーター置換の組み合わせと見なすことができます。)例: myArr=(A B C D) NAME=myArr # Get the number of elements in the array indirectly referenced by NAME. count=${#$NAME[@]} # This syntax is invalid. What is the right way? 以下は、すべて失敗する複数の試行です。 # Setup …

5
Bashパラメータ配列$ @のインデックス作成と変更
でインデックスを参照することは可能$@ですか?私は、GrayCatのwikiのどこにも次のように使用する参照を見つけることができません。代わりに、「高度なスクリプトガイド」などが、これを変更する前に別の変数に割り当てます。 $ echo ${@[0]} -bash: ${@[0]}: bad substitution 目標はDRYです。最初の引数は1つのことに使用され、残りは別の引数に使用されます。正規化するコード、$@配列、またはこのための個別の関数の重複を避けたいです(ただし、これはおそらくこれが最も簡単な方法です。 明確化:コードをデバッグしやすくするために、可変長 の値を変更することが目的でした。現在のバージョンは私の好みでは少しハックですが、次のような奇妙なパスでも機能します$@ $'--$`\! *@ \a\b\e\E\f\r\t\v\\\"\' \n' 更新:これは不可能のようです。コードはコードとデータの両方の複製を使用しますが、少なくとも機能します。 path_common() { # Get the deepest common path. local common_path="$(echo -n "${1:-}x" | tr -s '/')" common_path="${common_path%x}" shift # $1 is obviously part of $1 local path while [ -n "${1+defined}" ] do path="$(echo …
11 bash  parameter 



3
$ 0変数を分割してbashのディレクトリと相対パスを見つけるにはどうすればよいですか?
$ 0変数には、スクリプトのパス情報が含まれています。 パス情報を絶対パスに変更するにはどうすればよいですか?〜、。、..、または類似の処理方法を意味しますか? パス情報をディレクトリとファイル名に分割するにはどうすればよいですか? これにはpython / perlを使用できますが、可能であればbashを使用したいと思います。
10 bash  parameter 

2
$ BASHPIDと$$は異なる場合があります
「オレイリーのBASHポケットガイド」を読んでいます。と言いました: 現在のBashプロセスのプロセスID。場合によっては、$$と異なる場合があります。 上記の説明では、$BASHPID変数について説明しました。 質問:どのケースですか?

10
Bash:IPv4アドレスの4つのセクションの1つを抽出します
構文${var##pattern}を使用して${var%%pattern}、IPv4アドレスの最後と最初のセクションを抽出できます。 IP=109.96.77.15 echo IP: $IP echo 'Extract the first section using ${var%%pattern}: ' ${IP%%.*} echo 'Extract the last section using ${var##pattern}: ' ${IP##*.} パラメータ拡張を使用してIPv4アドレスの2番目または3番目のセクションを抽出するにはどうすればよいですか? これが私の解決策です:配列を使用してIFS変数を変更します。 :~/bin$ IP=109.96.77.15 :~/bin$ IFS=. read -a ArrIP<<<"$IP" :~/bin$ echo ${ArrIP[1]} 96 :~/bin$ printf "%s\n" "${ArrIP[@]}" 109 96 77 15 また、私は使用して、いくつかのソリューションを書かれているawk、sedとcutのコマンドを。 さて、私の質問は:配列とIFS変更を使用しないパラメーター拡張に基づくより簡単な解決策はありますか?

2
シェルパラメータ変数($ 1、…、$ @)をCLIで直接使用することは可能ですか?
場合によっては、上記の変数を小さな例でエミュレートして検証する必要があり、すぐにスクリプトなどにコピーできます。 次の方法で簡単な例を使用して解決しようとしました: (find $1) /tmp sh -c '(find $1) /tmp' sh -c "find $1" /tmp echo '(find $1) /tmp' | sh そして他の組み合わせで。また、シバンインタープリターディレクティブを追加して実験しました#!/bin/sh -xが、望ましい結果が得られませんでした。 これは簡単にできますか?


1
連想配列をパラメーターリストとしてスクリプトに渡す
スクリプトには、次のような連想配列があります。 declare -A VARS=( ["key1"]="value1" ["key2"]="value" ) それをフォームのパラメータリストに変換する単一のコマンドはありますか --key1=value1 --key2=value2 手動で書き直す必要なし --key1="${VARS[key1]}" --key2="${VARS[key2]}" 私が考えていたユースケースは、次のように、パラメータのリストとして配列をスクリプトに渡すことでした。 my_script.sh $(to_param_list $VARS) @Kusalanandaの回答で行ったコメントをさらに詳しく説明すると、私の正確な使用例は次のとおりです。makeselfを使用して自己解凍インストーラーをビルドするために使用するスクリプトがあり、このスクリプトは、次のように分離されるパラメーターを受け取ります。 スクリプト自体のパラメーター 自己解凍インストーラー内のインストーラーのパラメーター 次に、スクリプトは次のようにインストーラーをビルドします。 to_param_list installer_param_list installer_param_array ./makeself ./path/to/sourcedir ./path/to/created/installer "My installer" ./path/to/install/inside/package "${installer_param_list[@]}" ただし、パッケージ内の非常に単純なインストーラースクリプトを使用してパラメーターの受け渡しをテストしました。 while ! -z "$1" ; do echo "$1" shift done 次のような配列を渡します: installer_param_array=( ["upgrade-from"]="19 .2.0" ["upgrade-to"]="19.3.0" ) この出力結果: --upgrade-to=19.3.0 …

5
Bash配列でのパラメーター置換の使用
Bash配列に読み込む必要があるfile.txtがあります。次に、スペース、二重引用符、およびすべてのエントリの最初のカンマを除くすべてを削除する必要があります。これが私がどこまで得たかです: $ cat file.txt 10,this 2 0 , i s 30,"all" 40,I 50,n,e,e,d,2 60",s e,e" $ cat script.sh #!/bin/bash readarray -t ARRAY<$1 ARRAY=( "${ARRAY[@]// /}" ) ARRAY=( "${ARRAY[@]//\"/}" ) for ELEMENT in "${ARRAY[@]}";do echo "|ELEMENT|$ELEMENT|" done $ ./script.sh file.txt |ELEMENT|10,this| |ELEMENT|20,is| |ELEMENT|30,all| |ELEMENT|40,I| |ELEMENT|50,n,e,e,d,2| |ELEMENT|60,se,e| コンマの状況を除いて、それは素晴らしい働きをします。この猫のスキンを作成する方法は複数あることは承知していますが、これは一部のスクリプトが大きいため、ここに到達するにはパラメーター置換を使用したいと思います。 |ELEMENT|10,this| |ELEMENT|20,is| |ELEMENT|30,all| |ELEMENT|40,I| …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.