はじめに もう文字列の置換で sed コマンド使うの禁止して良いんじゃないですかね? 言いすぎだとわかってあえて言っていますが。 悪い書き方(外部コマンドに頼る方法) # 変数 line に入ってる文字列を echo コマンドで出力して sed コマンドに渡し、 # sed の s コマンドで "from" を "to" に置換して出力したものを ret 変数で受け取る ret=$(echo "$line" | sed "s/from/to/")
化石みたいな問題。 よく知られていることだが、下記のような各行を足し算するシェルスクリプトを書くと、最後の結果が0になってびっくりする。 $ cat get_nothing.sh __calculate_total() { local total=0 fpath=$1 cat $fpath | while read line; do total=$(( $total + ${line:-0} )) done echo "Total reaches $total" } __calculate_total $@ $ cat numbers.txt 101 -40 4566 32 $ bash ./get_nothing.sh numbers.txt Total reaches 0 これはwhile等の制御文だったかパイプの先だったか忘れたが、bashが別プロセス起こしちゃうんで、戻ってくるとき
要旨 変数は基本的にグローバル変数である。同じプロセス内で参照・変更ができる。 サブシェル実行した場合、元プロセスのグローバル変数を参照・変更できる。ただし、値の変更は元プロセスに伝播しない。 スクリプト内でsh実行した場合、exportされた元プロセスのグローバル変数のみ参照・変更できる。ただし、値の変更は元プロセスに伝播しない。 関数内においてlocal宣言された変数はその関数内でのみ有効で、関数外には持ち出されない。 検証 環境 Ubuntu 18.04 (WSL) bash 4.4.19 bashの実行プロセスについて 本題に入る前に子シェルや関数の実行プロセスについて確認する。 関数の実行 #!/bin/bash echo "ベタ書き" echo "main PID/BASHPID/PPID=$$/$BASHPID/$PPID" func1(){ echo "func1 PID/
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く